本文已收錄在Github,關注我,緊跟本系列專欄文章,咱們下篇再續!
- 🚀 魔都架構師 | 全網30W技術追隨者
- 🔧 大廠分佈式系統/數據中台實戰專家
- 🏆 主導交易系統百萬級流量調優 & 車聯網平台架構
- 🧠 AIGC應用開發先行者 | 區塊鏈落地實踐者
- 🌍 以技術驅動創新,我們的征途是改變世界!
- 👉 實戰乾貨:編程嚴選網
1 樹狀目錄結構
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下
不推薦的路徑
|
路徑
|
原因
|
|
|
雖然也可用於本地編譯軟件,但更適用於 C/C++ 編譯安裝的程序;JAR 包是平台無關的, |
|
|
屬於用户目錄,不適合生產服務部署(權限、生命週期、多用户問題)。
|
|
|
用於變動數據(如日誌、緩存),不是程序本體存放地。 |
|
|
僅限 root 用户,且安全風險高,絕不應放應用。
|
補充建議(生產環境)
創建專用用户運行服務
useradd -r -s /sbin/nologin myapp
chown -R myapp:myapp /opt/myapp
使用 systemd 管理服務
創建 /etc/systemd/system/myapp.service,指定 WorkingDirectory=/opt/myapp 和 ExecStart=java -jar myapp.jar。
配置文件外置
通過 --spring.config.location=/opt/myapp/config/ 指定外部配置,方便更新。
日誌輸出到 /var/log/myapp/
符合 FHS 規範,便於日誌輪轉(logrotate)。
小結
JAR 包應規範地放在
/opt/你的應用名/目錄下,這是 Linux 社區和企業運維廣泛接受的標準做法。
如有容器化(Docker)需求,則另當別論——但若直接部署在物理機或虛擬機,/opt 是最佳選擇。