Linux 文件系統的層次化結構

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 ]

/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 ]

/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 下。

注意到,這裏沒有 etcvar,Linux 但願歸屬於 /usr 的軟件包的配置文件和動態數據被統一收納在 /etc /var 內。

[ /usr/local ]

/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/

相關文章
相關標籤/搜索