本文已收錄在Github,關注我,緊跟本系列專欄文章,咱們下篇再續!

  • 🚀 魔都架構師 | 全網30W技術追隨者
  • 🔧 大廠分佈式系統/數據中台實戰專家
  • 🏆 主導交易系統百萬級流量調優 & 車聯網平台架構
  • 🧠 AIGC應用開發先行者 | 區塊鏈落地實踐者
  • 🌍 以技術驅動創新,我們的征途是改變世界!
  • 👉 實戰乾貨:編程嚴選網

1 樹狀目錄結構

你的JAR包放對了嗎?​​後端開發必知的Linux目錄規範_jar

2 解釋

  • /bin: Binaries(二進制文件)的縮寫, 這個目錄存放着最經常使用的命令
  • /boot: 啓動 Linux 時使用的一些核心文件,包括一些連接文件和鏡像文件
  • /dev : Device(設備)的縮寫,存放Linux的外部設備,在 Linux 中訪問設備的方式和訪問文件的方式是相同的
  • /etc: Etcetera(等等)的縮寫,存放所有的系統管理所需要的配置文件和子目錄
  • /home: 用户的主目錄,在 Linux 中,每個用户都有一個自己的目錄,一般該目錄名是以用户的賬號命名的,如上圖中的 alice、bob 和 eve
  • /lib: Library(庫)的縮寫這個目錄裏存放着系統最基本的動態連接共享庫,類似 Windows 裏的 DLL 文件。幾乎所有的應用程序都需要用到這些共享庫
  • /lost+found: 一般空的,當系統非法關機後,這裏就存放了一些文件。 fsck(文件系統檢查工具)在修復損壞的 inode 後恢復的碎片文件會放在這裏。
  • /media: Linux系統會自動識別一些設備,如U盤、光驅等等,當識別後,Linux 會把識別的設備掛載到這個目錄
  • /mnt: 讓用户臨時掛載別的文件系統,可將光驅掛載在 /mnt/ 上,然後進入該目錄就可以查看光驅裏的內容
  • /opt: optional(可選)的縮寫,給主機額外安裝軟件所擺放的目錄。如你安裝一個oracle數據庫就可放到該目錄下。默認是空的。
  • /proc: Processes(進程)的縮寫,/proc 是一種偽文件系統(也即虛擬文件系統),存儲的是當前內核運行狀態的一系列特殊文件,這個目錄是一個虛擬的目錄,它是系統內存的映射,我們可以通過直接訪問這個目錄來獲取系統信息。 這個目錄的內容不在硬盤上而是在內存裏,我們也可以直接修改裏面的某些文件,比如可以通過下面的命令來屏蔽主機的ping命令,使別人無法ping你的機器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root: 該目錄為系統管理員,也稱作超級權限者的用户主目錄。
  • /sbin: s 就是 Super User 的意思,是 Superuser Binaries (超級用户的二進制文件) 的縮寫,這裏存放的是系統管理員使用的系統管理程序。
  • /selinux: 這個目錄是 Redhat/CentOS 所特有的目錄,Selinux 是一個安全機制,類似於 windows 的防火牆,但是這套機制比較複雜,這個目錄就是存放selinux相關的文件的。
  • /srv: 該目錄存放一些服務啓動之後需要提取的數據。
  • /sys
    這是 Linux2.6 內核的一個很大的變化。該目錄下安裝了 2.6 內核中新出現的一個文件系統 sysfs 。
    sysfs 文件系統集成了下面3種文件系統的信息:針對進程信息的 proc 文件系統、針對設備的 devfs 文件系統以及針對偽終端的 devpts 文件系統。
    該文件系統是內核設備樹的一個直觀反映。
    當一個內核對象被創建的時候,對應的文件和目錄也在內核對象子系統中被創建。
  • /tmp: tmp 是 temporary(臨時) 的縮寫這個目錄是用來存放一些臨時文件的。
  • /usr: unix shared resources(共享資源)的縮寫,用户的很多應用程序和文件都放在這個目錄,類似於 windows 下的 program files 目錄
  • /usr/bin: 系統用户使用的應用程序。
  • /usr/sbin: 超級用户使用的比較高級的管理程序和系統守護程序。
  • /usr/src: 內核源代碼默認的放置目錄。
  • /var: var 是 variable(變量) 的縮寫,這個目錄中存放着在不斷擴充着的東西,我們習慣將那些經常被修改的目錄放在這個目錄下。包括各種日誌文件。
  • /run: 是一個臨時文件系統,存儲系統啓動以來的信息。當系統重啓時,這個目錄下的文件應該被刪掉或清除。如果你的系統上有 /var/run 目錄,應該讓它指向 run。

3 高危路徑

/etc: 系統中的配置文件,如果你更改了該目錄下的某個文件可能會導致系統不能啓動。

/bin, /sbin, /usr/bin, /usr/sbin: 這是系統預設的執行文件的放置目錄,比如 ls 就是在 /bin/ls 目錄下的。

值得提出的是 /bin/usr/bin 是給系統用户使用的指令(除 root 外的通用用户),而/sbin, /usr/sbin 則是給 root 使用的指令。

/var: 系統上跑了很多程序,那麼每個程序都會有相應的日誌產生,而這些日誌就被記錄到這個目錄下,具體在 /var/log 目錄,mail 的預設放置也在這。

4 後端開發的 JAR 包應放在哪個目錄?

根據 Linux FHS 標準生產環境最佳實踐,部署自研 Java 應用(如 Spring Boot 打包的 JAR)時,最規範的位置是/opt。

/opt/myapp/
├── myapp.jar
├── config/
│   └── application.yml
├── logs/
└── run.sh

為啥是 /opt

  • FHS 明確定義/opt 用於安裝 附加的、非系統自帶的第三方應用程序(add-on application software packages)。
  • Java 後端服務屬於“自研應用”或“第三方商業軟件”,不屬於操作系統核心組件,因此不應放在 /usr/bin
  • 清晰隔離:避免與系統文件混雜,便於管理、備份和權限控制。
  • 多數企業運維規範(如 Red Hat、Debian、阿里雲、騰訊雲文檔)均推薦將自定義服務部署在 /opt

不推薦的路徑

路徑

原因

/usr/local

雖然也可用於本地編譯軟件,但更適用於 C/C++ 編譯安裝的程序;JAR 包是平台無關的,/opt 更合適。

/home/xxx

屬於用户目錄,不適合生產服務部署(權限、生命週期、多用户問題)。

/var

用於變動數據(如日誌、緩存),不是程序本體存放地。

/root

僅限 root 用户,且安全風險高,絕不應放應用。

補充建議(生產環境)

創建專用用户運行服務
useradd -r -s /sbin/nologin myapp
chown -R myapp:myapp /opt/myapp
使用 systemd 管理服務

創建 /etc/systemd/system/myapp.service,指定 WorkingDirectory=/opt/myappExecStart=java -jar myapp.jar

配置文件外置

通過 --spring.config.location=/opt/myapp/config/ 指定外部配置,方便更新。

日誌輸出到 /var/log/myapp/

符合 FHS 規範,便於日誌輪轉(logrotate)。

小結

JAR 包應規範地放在 /opt/你的應用名/ 目錄下,這是 Linux 社區和企業運維廣泛接受的標準做法。

如有容器化(Docker)需求,則另當別論——但若直接部署在物理機或虛擬機,/opt 是最佳選擇。