FHS,Filesystem Hierarchy Standard,文件系統層次化標準。這是一個推薦標準,能夠從 http://www.pathname.com/fhs/ 獲取。linux
本文不討論 FHS,由於它是針對 Unix 發行版提供的一個推薦方案。本文旨在描述 Linux 常見的文件系統層次化結構。vim
雖然不討論 FHS,但咱們仍然須要知道設計文件系統層次化結構的一些準則,以理解現有結構的設計思路。緩存
咱們知道 /
是文件系統的根目錄。在根目錄下有:安全
目錄 | 用途 | 例子 |
---|---|---|
/boot |
引導程序所需的靜態數據 | |
/bin |
基本的用戶命令 | /bin/ls |
/sbin |
基本的系統命令 | /sbin/shutdown |
/lib |
連接庫和內核模塊 | /lib/ld-linux.so.2 |
/opt |
存放第三方的軟件包 | |
/etc |
配置文件 | /etc/hostname |
/tmp |
臨時文件 | |
/run |
與進程相關的數據 | /run/xxx.pid /run/xxx.sock |
/var |
動態數據 | |
/usr |
常規內容 | |
/root |
root 用戶的主目錄 | |
/home |
存放其餘用戶的主目錄 | /home/alice |
/bin
/sbin
這裏使用「命令」一詞,是由於這裏的可執行文件都是可以直接運行的。系統命令是指那些應該僅由管理員使用的命令。設計
/lib
可能有一系列變體,裏面有對應於特定體系結構的庫,如 /lib64/ld-linux-x86-64.so.2
。代理
/opt
裏推薦使用這樣的目錄結構:日誌
/opt/<package>/ bin include lib doc man
額外地,不推薦把軟件包的配置文件(etc
)和動態數據(var
)放在這裏,而是分別放置在 /etc/opt/<package>
/var/opt/<package>
。code
/var
裏大體會有:blog
目錄 | 用途 | 例子 |
---|---|---|
log |
日誌文件 | |
run |
與進程相關的數據 | |
lock |
本地鎖 | |
tmp |
臨時文件 | |
cache |
緩存數據 | |
lib |
持久化的狀態數據 | |
spool |
假脫機代理的數據 | |
backups |
備份數據 | |
crash |
系統崩潰轉儲信息 | |
opt |
來自 /opt 軟件包的可變數據 |
|
local |
來自/usr/local 軟件包的可變數據 |
/run
跟 /var/run
通常並沒有二致,並且一般其中一個會符號連接到另外一個。遊戲
/tmp
跟 /var/tmp
區別在於通常 /tmp
裏面的文件會在系統重啓後被自動清空,而 /var/tmp
不這樣。
/usr
下存放那些並不是系統最基本的常規內容。它包括:
目錄 | 用途 | 例子 |
---|---|---|
bin |
用戶命令 | /usr/bin/vim |
sbin |
系統命令 | /usr/sbin/useradd |
lib<qual> |
連接庫和軟件包私有的靜態數據文件 | /usr/lib/X11 |
share |
軟件包共享的靜態數據文件 | |
include |
C 頭文件 | /usr/include/stdio.h |
src |
軟件包源碼 | /usr/src/linux-headers-common |
local |
本地定製的內容 |
各 Linux 發行版提供的軟件包管理器通常會將它所管理的各類軟件的內容置於 /usr
下。
注意到,這裏沒有 etc
和 var
,Linux 但願歸屬於 /usr
的軟件包的配置文件和動態數據被統一收納在 /etc
/var
內。
/usr/local
默認是空的,用於存放那些系統管理員自定義的內容。這些軟件包不受系統和軟件包管理器管理,也不會隨着系統升級而被覆蓋。它包括:
目錄 | 用途 |
---|---|
bin |
用戶命令 |
sbin |
系統命令 |
lib<qual> |
連接庫和軟件包私有的靜態數據 |
share |
軟件包共享的靜態數據 |
etc |
軟件包配置 |
var |
動態數據 |
include |
C 頭文件 |
src |
軟件包源碼 |
注意到這裏有 etc
var
,由於你可能會不但願自定義的軟件包的配置和動態數據跟系統自帶的混在一塊兒。
/srv
用於存放系統提供的各類服務的數據,如 /srv/ftp
或 /srv/project-1/http
。Ubuntu 上並未使用它,而 Manjaro 使用了。
/lost+found
用於存放文件系統修復時找回的部分文件,這些文件被文件系統修復程序 fsck
發現,可是丟失了引用。
/usr/games
/usr/local/games
用於存儲與遊戲相關的內容。
對於訪問設備、掛載額外的文件系統,在根目錄下有:
目錄 | 用途 | 例子 |
---|---|---|
/dev |
存放設備的文件抽象 | /dev/null |
/mnt |
存放額外的掛載點 | |
/proc |
Linux 內核狀態的文件抽象 |
在如今看來 /media
/mnt
之間的界限沒有那麼明顯,但好久以前的人們是但願區分他們的:
/mnt
只包含臨時的掛載點,在不影響現有系統的狀況下存取文件/media
包含可移動設備的掛載點。如 /media/cdrom0
Ubuntu 使用了 /media
而 Manjaro 則使用 /mnt
,可是內容沒有本質區別。
理想的狀況下,系統管理員能夠在不一樣的掛載點掛載文件系統的不一樣部分,靈活地啓用不一樣的功能,並給予不一樣的訪問權限。
一些可能的切分以下:
/
/usr
/usr/local
/opt
/etc
/etc/opt
/var
/var/opt
/run
/tmp
/home
舉例來講,系統管理員在配置完 /usr
下的軟件包後,能夠以只讀模式掛載 /usr
來保證其安全和穩定。
原文連接 https://blog.xupu.name/p/2018-11-linux-filesystem-hierarchy/