FHS(Filesystem Hierarchy Standard),文件系統層次結構標準。
根據 FHS 的官方文件指出,其主要目的是希望讓用戶可以了解到數據通常放置于哪個目錄下。也就是說,FHS的重點在于規范每個特定的目錄下應該要放置什么樣子的數據而已。
FHS定義了兩層規范
第一層是, / 根目錄下面的各個目錄應該要放什么文件數據;
第二層,針對 /usr 和 /var 這兩個目錄的子目錄來定義;
FHS 依據 文件系統使用的頻繁與否 與 是否用戶可以隨意改動,將目錄定義成四種交互作用的形態:
可分享的(shareable):可以分享給其他系統(網絡主機)掛載使用的目錄;
不可分享的(unshareable):僅與自身機器有關,不適合分享給其他主機;
可變動的(variable):經常會改變的;
不變的(static):有些數據是不會經常變化的,只會隨著系統版本而變動,如函數庫等;
根目錄(/)
根目錄是系統最重要的一個目錄,不但所有的目錄都是根目錄衍生出來的,同時根目錄也與開機、還原、系統修復等操作有關。
FHS標準建議:根目錄(/)所在分區應該越小越好,且應用程序所安裝的軟件最好不要與根目錄放在同一個分區。如此不但性能較好,根目錄所在的文件系統也比較不容易發生問題。
執行文件目錄(/bin)
系統有許多放置執行文件的目錄,但 /bin 比較特殊。因為 /bin 放置的是在單用戶模式下還能被操作的命令。在 /bin 下面的命令可以被root與一般賬戶所使用,主要有 cat,chmod,chown,date,mv,mkdir,cp,bash等常用命令。
開機文件目錄(/boot)
這個目錄主要放置開機會使用到的文件,包括 Linux內核文件以及開機菜單與開機所需配置文件等。
驅動設備目錄(/dev)
在Linux系統上,任何設備與接口設備都是以文件的形式存在于這個目錄當中的。你只要通過訪問這個目錄下面的某個文件,就等于訪問了某個設備。比較重要的文件有 /dev/null,/dev/zero,/dev/tty等。
配置文件目錄(/etc)
系統主要的配置文件幾乎都放置在這個目錄內,如賬戶密碼文件、各種服務的配置文件等。一般來說,這個目錄下各文件屬性可以讓一般用戶查閱,但只有root有權修改。
用戶主目錄(/home)
系統默認的用戶主文件夾(home directory),在創建一個一般用戶時,默認的用戶文件夾會規范到這里來。 ~ 代表當前用戶的主文件夾。
系統函數庫(/lib)
系統的函數庫非常多,而 /lib 放置的則是在開機時會用到的函數庫,以及在 /bin 或 /sbin 下面的命令會調用的函數庫而已。
可以把函數庫想象成 “外掛”,某些命令必須要有這些“外掛”才能夠順利完成程序的執行。
媒體設備暫掛區(/media)
這個 /media 下面放置的就是可刪除的設備,包括軟盤、光盤、DVD等設備都暫時掛載于此。常見的文件名有 /media/floppy,/media/cdrom等。
額外設備暫掛區(/mnt)
如果想要暫時掛載某些額外的設備,一般建議可以放置到這個目錄中。在較早的時候,這個目錄的用途與 /media 相同,只是有了 /media 之后,這個目錄就被用來暫時掛載用了。
第三方軟件安裝目錄(/opt)
這個目錄用于安裝第三方應用程序,可以由用戶自己指定安裝位置。當需要卸載第三方應用程序時,可以直接刪除安裝目錄,而不影響系統其他任何設置。
管理員文件夾(/root)
系統管理員(root)的主文件夾。之所以放在這里,是因為如果進入單用戶維護模式而僅掛載根目錄時,該目錄就能夠擁有 root 的主文件夾,所以我們會希望 root 的主文件夾與根目錄放置在同一個分區中。
重要系統執行文件(/sbin)
Linux有非常多的命令是來設置系統環境的,這些命令只有 root 才能夠利用來“設置”系統,其他用戶最多只能查詢。放在 /sbin 下面的為開機過程中所需的,里面包括了開機、修復、還原系統所需的命令。
服務數據存放目錄(/srv)
srv 可看做 “service” 的縮寫,是一些網絡服務啟動之后,這些服務所需要取用的數據目錄。
臨時文件存放目錄(/tmp)
這是讓一般用戶或者是正在執行的程序暫時放置文件的地方。這個目錄任何人都可以訪問,所以需要定期清理。當然,重要數據不可放置在此目錄,因為系統會不定期將 /tmp 目錄下的數據全部刪除。
丟失內容修復目錄(/lost+found)
這個目錄是使用標準的 ext2/ext3/ext4 文件系統格式才會產生的一個目錄,目的相當于文件系統發生錯誤時,將一些丟失的片段放置到這個目錄下。這個目錄通常存在于分區的最頂層。
虛擬文件系統目錄(/proc)
這個目錄本身是一個虛擬文件系統(virtual filesystem),它放置的數據都是在內存當中,例如系統內核,進程,外部設備以及網絡狀態等。因為這個目錄下的數據都是在內存當中的,所以本身并不占用任何硬盤空間。
虛擬文件系統目錄(/sys)
這個目錄也是一個虛擬的文件系統,主要是記錄與內核有關的信息。包括目前已加載的內核模塊與內核檢測到的硬件設備信息等,這個目錄同樣不占用硬盤容量。
系統軟件資源目錄(/usr)
usr 是 Unix Software Resource 的縮寫,也就是 Unix系統軟件資源 所放置的目錄,而不是 user,這要注意。
FHS 建議所有軟件開發者應該將他們的數據合理地分別放置到這個目錄下的子目錄,而不要自行新建該軟件的獨立目錄。
/usr/bin/ :絕大部分用戶可使用的命令都放在這里;
/usr/include/ :C/C++等程序語言的頭文件(header)與包含文件(include)放置處;
/usr/lib :包含各應用軟件的函數庫、目標文件以及一些不被一般用戶慣用的執行文件或腳本;
/usr/local/ ;系統管理員在本機自行安裝下載的軟件建議安裝到此目錄;
/usr/sbin/ ;非系統正常運行所需的命令;
/usr/share/ ;放置共享文件的地方;
/usr/src/ ;一般源碼建議放置到這里;
常態可變動文件目錄(/var)
該目錄主要針對常態性可變動文件,包括緩存(cache)、登錄文件(log file)以及某些軟件運行所產生的文件,包括程序文件(lock file、run file),或者如 MySQL數據庫的文件等。
如果 /usr 是安裝時會占用較大硬盤容量的目錄,那么 /var 就是在系統運行后才會漸漸占用磁盤容量的目錄。
/var/cache/ :應用程序本身運行過程中會產生一些暫存文件;
/var/lib/ :程序本身執行的過程中,需要用到的數據文件放置的目錄;
/var/lock/ :目錄下的文件資源一次只能被一個應用程序所使用;
/var/log/ :放置日志文件的目錄;
/var/mail/ :放置電子郵件的目錄;
/var/run/ :某些程序或服務啟動后的PID目錄;
/var/spool/ :放置排隊等待其他應用程序使用的數據;