Linux 檔案系統層級標準 Filesystem Hierarchy Standard (FHS)3.0 基本全章節中文翻譯
本文章所有內容不允許以任何形式進行轉載、複製、存檔或分發等,為了避免翻譯過程中對標準內容理解有誤、或語言組織不嚴謹等造成的不能100%表達或闡述原標準的思想和內容,從而誤導讀者或造成錯誤等,強烈要求讀者以原英文版為準,此文章只做為個人學習筆記。
歡迎讀者以留言等任何方式予以糾正錯誤。
Linux 基金會官網原英文版連結:
http://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.html
製作根檔案系統時,我不知道需要新建哪些目錄,網上的文章各有各的說法,所以就瞭解了下FHS
FHS 目前有兩個版本 2.3 和 3.0,
FHS 2.3 於2004年1月29日釋出。
FHS 3.0 於2015年6月3日釋出。
下文將以3.0為基礎進行翻譯
主要用了 google 和 youdao 翻譯
Filesystem Hierarchy Standard
LSB Workgroup, The Linux Foundation
Version 3.0
Copyright © 2015 The Linux Foundation
Copyright © 1994-2004 Daniel Quinlan
Copyright © 2001-2004 Paul 'Rusty' Russell
Copyright © 2003-2004 Christopher Yeoh
目錄
3.4 /bin:基本使用者命令二進位制檔案(供所有使用者使用)
3.7.5. /etc/X11 : X Window系統的配置(可選)
3.7.6. /etc/sgml : SGML的配置檔案(可選)
3.7.7. /etc/xml : XML 的配置檔案(可選)
3.17. /srv : Data for services provided by this system
4.7 /usr/libexec:其他程式執行的二進位制檔案(可選)
4.8. /usr/lib : Alternate format libraries (optional)
4.10. /usr/sbin : 非必要的標準系統二進位制檔案
5.8.4. /var/lib/ : Editor backup files and state (optional)
5.8.5. /var/lib/color : Color management information (optional)
5.8.6. /var/lib/hwclock : State directory for hwclock (optional)
5.8.7. /var/lib/misc : Miscellaneous variable data
5.14. /var/spool : Application spool data
5.16 /var/yp:網路資訊服務(NIS)資料庫檔案(可選)
6.1.2 /bin:基本使用者命令二進位制檔案(供所有使用者使用)
6.1.10. /var/spool/cron : cron and at jobs
第3章 根檔案系統
3.2 要求
/
中需要以下目錄或目錄的符號連結
目錄 | 描述 |
---|---|
bin |
基本命令二進位制檔案 |
boot |
引導 boot loader 的靜態檔案 |
dev |
裝置檔案 |
etc |
主機專用的系統配置 |
lib |
基本共享庫和核心模組 |
media |
可移動媒體的掛載點 |
mnt |
臨時掛載檔案系統的掛載點 |
opt |
附加應用程式軟體包 |
run |
程序執行過程中的相關資料 |
sbin |
基本系統二進位制檔案 |
srv |
提供該系統服務的資料 |
tmp |
臨時檔案 |
usr |
二級層次結構 |
var |
可變資料 |
由於這些目錄的複雜性, /usr
和/var
會有完整的章節單獨介紹。
3.3 具體選擇
如果安裝了相應的子系統,則以下目錄或目錄的符號連結必須位於/
:
目錄 | 描述 |
---|---|
home |
使用者主目錄(可選) |
lib |
另一種格式的基本共享庫 (可選) |
root |
root使用者的主目錄(可選) |
上面列出的每個目錄都在下面的單獨小節中詳細說明。
3.4 /bin:基本使用者命令二進位制檔案(供所有使用者使用)
3.4.1 目的
/bin
包含可供系統管理員和使用者使用的命令,但在沒有安裝其他檔案系統時(例如,在單使用者模式下)則需要這些命令。 它還可能包含指令碼間接使用的命令。[1]
[1] 沒有必要放入 /bin 的命令二進位制檔案必須放在 /usr/bin 中。非root使用者(X Window System,chsh等)所需的項通常沒有必要放入根分割槽。
3.4.2 要求
/bin
必須沒有子目錄。
/bin
中需要以下命令或命令的符號連結:
cat | 用於將檔案連線到標準輸出的實用程式 |
chgrp | 用於更改檔案組所有權的實用程式 |
chmod | 用於更改檔案訪問許可權的實用程式 |
chown | 用於更改檔案所有者和組的實用程式 |
cp | 用於複製檔案和目錄的實用程式 |
date | 用於列印或設定系統資料和時間的實用程式 |
dd | 用於轉換和複製檔案的實用程式 |
df | 用於報告檔案系統磁碟空間使用情況的實用程式 |
dmesg | 用於列印或控制核心訊息緩衝區的實用程式 |
echo | 用於顯示一行文字的實用程式 |
false | Utility to do nothing, unsuccessfully |
hostname | 用於顯示或設定系統主機名的實用程式 |
kill | 用於向程序傳送訊號的實用程式 |
ln | 用於在檔案之間建立連結的實用程式 |
login | 用於在系統上開始會話的實用程式 |
ls | 用於列出目錄內容的實用程式 |
mkdir | 用於製作目錄的實用程式 |
mknod | 用於製作塊或字元特殊檔案的實用程式 |
more | 用於翻閱文字的實用程式 |
mount | 掛載檔案系統的實用程式 |
mv | 用於移動/重新命名檔案的實用程式 |
ps | 報告程序狀態的實用程式 |
pwd | 用於列印當前工作目錄名稱的實用程式 |
rm | 用於刪除檔案或目錄的實用程式 |
rmdir | 用於刪除空目錄的實用程式 |
sed | `sed' 流編輯器 |
sh | 與POSIX命令相容的shell |
stty | 用於更改和設定終端命令列的實用程式 |
su | 用於更改使用者ID的實用程式 |
sync | 用於重新整理檔案系統緩衝區的實用程式 |
true | Utility to do nothing, successfully |
umount | 用於解除安裝檔案系統的實用程式 |
uname | 用於列印系統資訊的實用程式 |
如果 /bin/sh 本身不是POSIX相容的shell命令,則它必須是真實shell命令的硬連結或符號連結。
[ 和 test 命令 必須一起放置在 /bin
或 /usr/bin
內.
基本原理:
當呼叫sh時,各個shell的表現不同,以便在需要允許更改或擴充套件至POSIX時,保留POSIX相容性。
要求 [ 和 test 命令作為二進位制檔案(即使由shell在內部實現)包含的要求與POSIX.1-2008標準共享。
3.4.3 具體選擇
如果安裝了相應的子系統,則以下程式或程式的符號連結必須位於/bin
:
Command | Description |
---|---|
csh | C shell(可選) |
ed | `ed' 編輯器(可選) |
tar | tar 歸檔實用程式(可選) |
cpio | cpio 歸檔實用程式(可選) |
gzip | GNU 壓縮實用程式(可選) |
gunzip | GNU 解壓縮實用程式(可選) |
zcat | GNU 解壓縮實用程式(可選) |
netstat | 網路統計工具(可選) |
ping | ICMP網路測試實用程式(可選) |
/bin/csh 可以是 /bin/tcsh 或 /usr/bin/tcsh 的符號連結。
基本原理
添加了tar , gzip 和 cpio 命令以使系統恢復成為可能(假設 / 是完整的).
相反,如果不期望從根分割槽恢復,則可以省略這些二進位制檔案(e.g., a ROM chip root, 通過 NFS 掛載 /usr
). 如果計劃通過網路恢復系統,則 ftp 或 tftp(以及獲取ftp連線所需的一切)在根分割槽上必須是可用的 。
3.5. /boot:boot loader 的靜態檔案
3.5.1. 目的
此目錄包含引導過程所需的所有內容,引導時不需要的配置檔案和對映安裝程式除外。 因此 /boot
儲存在核心開始執行使用者模式程式之前使用的資料。 這可能包括儲存的主引導扇區和扇區對映檔案。
為了 boot loader 能夠引導檔案,必要的程式必須放置在/sbin中 ,在啟動時,boot loaders 不需要的配置檔案必須放到 /etc
3.5.2 具體選擇
作業系統核心必須位於/
或 /boot
。
某些體系結構可能對/boot
有其他要求,這與該體系結構特有的限制或期望有關。 這些要求未在此列舉; 允許發行版根據需要新增需求,以便在這些體系結構上啟用系統。
3.6 dev:裝置檔案
3.6.1 目的
/dev
目錄是特殊檔案或裝置檔案的位置。
如果有可能需要手動建立/dev
中的裝置,則 /dev
必須包含名為 MAKEDEV
的命令,該命令可以根據需要建立裝置。它還可以包含任何用於本地裝置的 MAKEDEV.local
如果需要,MAKEDEV 必須提供建立系統上可能找到的任何裝置的條件,而不僅僅是特定發行版安裝的裝置。
3.7 /etc:主機專用的系統配置
3.7.1 目的
/etc
層次結構包含配置檔案。“配置檔案”是用於控制程式執行的本地檔案;它必須是靜態的,不可執行二進位制檔案。[2]
[2]需要明確的是,/etc可能包含可執行指令碼,例如init通常呼叫的命令指令碼,用於啟動和關閉系統以及啟動守護程序。在此上下文中,“可執行二進位制”指的是人類不可讀格式的直接機器程式碼或虛擬碼,例如本機ELF可執行檔案。
建議將檔案儲存在/etc
子目錄中,而不是直接儲存在/etc
。
3.7.2 要求
/etc
下不能放置二進位制檔案。
/etc
中需要以下目錄或目錄的符號連結:
Directory | Description |
---|---|
opt | Configuration for /opt |
3.7.3 具體選擇
如果安裝了相應的子系統,則以下目錄或目錄的符號連結必須位於/etc
:[3]
[3]使用 shadow password suite 的系統將具有額外的配置檔案位於/etc
(/etc/shadow
and others),額外的程式位於 /usr/sbin
(useradd, usermod, and others).
Directory | Description |
---|---|
X11 | X Window系統的配置(可選) |
sgml | SGML的配置(可選) |
xml | XML的配置(可選) |
File | Description |
---|---|
csh.login |
Systemwide initialization file for C shell logins (optional) |
exports |
NFS filesystem access control list (optional) |
fstab |
有關檔案系統的靜態資訊(可選) |
ftpusers |
FTP daemon user access control list (optional) |
gateways |
File which lists gateways for routed (optional) |
gettydefs |
Speed and terminal settings used by getty (optional) |
group |
使用者組檔案(可選) |
host.conf |
Resolver configuration file (optional) |
hosts |
Static information about host names (optional) |
hosts.allow |
Host access file for TCP wrappers (optional) |
hosts.deny |
Host access file for TCP wrappers (optional) |
hosts.equiv |
List of trusted hosts for rlogin, rsh, rcp (optional) |
hosts.lpd |
List of trusted hosts for lpd (optional) |
inetd.conf |
Configuration file for inetd (optional) |
inittab |
Configuration file for init (optional) |
issue |
Pre-login message and identification file (optional) |
ld.so.conf |
List of extra directories to search for shared libraries (optional) |
motd |
Post-login message of the day file (optional) |
mtab |
Dynamic information about filesystems (optional) |
mtools.conf |
Configuration file for mtools (optional) |
networks |
Static information about network names (optional) |
passwd |
The password file (optional) |
printcap |
The lpd printer capability database (optional) |
profile |
Systemwide initialization file for sh shell logins (optional) |
protocols |
IP protocol listing (optional) |
resolv.conf |
Resolver configuration file (optional) |
rpc |
RPC protocol listing (optional) |
securetty |
TTY access control for root login (optional) |
services |
Port names for network services (optional) |
shells |
Pathnames of valid login shells (optional) |
syslog.conf |
Configuration file for syslogd (optional) |
mtab
does not fit the static nature of /etc
: it is excepted for historical reasons.[4]
[4]On some Linux systems, this may be a symbolic link to /proc/mounts
, in which case this exception is not required.
3.7.4 /etc/opt:/opt的配置檔案
3.7.4.1 目的
附加應用程式軟體包的主機專業配置檔案必須安裝在目錄/etc/opt/<subdir>
,其中<subdir>
是/opt
中子樹的名稱,其中儲存了該程式包中的靜態資料。
3.7.4.2 要求
對/etc/opt/<subdir>
的內部排列沒有任何強制結構。
如果配置檔案必須位於不同的位置以使程式包或系統正常執行,則可以將其放在/etc/opt/<subdir>
以外的位置。
基本原理
請參閱/opt
的基本原理。
3.7.5. /etc/X11 : X Window系統的配置(可選)
/etc/X11 是所有特定於X11主機的配置的位置. 如果/ usr以只讀方式掛載,則此目錄對於允許本地控制是必需的。
如果安裝了相應的子系統,則以下檔案或檔案的符號連結必須位於/etc/X11
:
File | Description |
---|---|
xorg.conf |
The configuration file for X.org versions 7 and later (optional) |
Xmodmap |
Global X11 keyboard modification file (optional) |
/etc/X11
的子目錄可能為 xdm
和任何其他程式 (some window managers, for example) 包含這些檔案.[5]
[5]/etc/X11/xdm
儲存xdm
的配置檔案。. These are most of the files previously found in /usr/lib/X11/xdm
. xdm
的一些區域性變數資料儲存在/var/lib/xdm
。
3.7.6. /etc/sgml : SGML的配置檔案(可選)
3.7.6.1 目的
SGML系統定義高階引數的配置檔案安裝在這裡,*.conf
檔案表示通用配置檔案。File with names *.cat
are the DTD-specific centralized catalogs, containing references to all other catalogs needed to use the given DTD. The super catalog file catalog
references all the centralized catalogs.
3.7.7. /etc/xml : XML 的配置檔案(可選)
3.7.7.1 目的
SGML系統定義高階引數的配置檔案安裝在這裡,名稱為*.conf
檔案表示通用配置檔案。The super catalog file catalog
references all the centralized catalogs.
3.8. /home : 使用者主目錄(可選)
3.8.1 目的
/home
是一個相當標準的概念,but it is clearly a site-specific filesystem.[6] 設定因主機而異。因此, no program should assume any specific location for a home directory, 而應該查詢它.[7]
[6]不同的人喜歡將使用者帳戶放在各種地方。本節僅介紹使用者主目錄的建議位置; 儘管如此,我們建議所有符合FHS的發行版都將此作為使用者主目錄的預設位置。為管理目的而建立的非登入帳戶通常將其主目錄放在其他位置。
在較小的系統中,每個使用者的主目錄通常實現為/home
目錄的子目錄,例如/home/smith
,/home/torvalds
,/home/operator
等。在大型系統中(尤其是當/home
目錄使用NFS在多個主機之間共享)細分使用者主目錄是有益的。細分可以通過使用子目錄如來完成/home/staff
,/home/guests
,/home/students
等。
[7]為了找到使用者主目錄, 使用庫函式例如 getpwent
, getpwent_r
或 fgetpwent
而不是依靠/etc/passwd,
因為使用者資訊有可能使用系統儲存在遠端,比如NIS.
3.8.2 要求
應用程式的使用者專用配置檔案儲存在使用者主目錄中以 '.' 字元 (a "dot file") 開頭的檔案中,如果應用程式需要建立多個 dot file 則應將它們放在名稱以'.' 字元, (a "dot directory")開頭的子目錄中.配置檔案不應該以 '.' 字元開頭。[8]
[8]除了自動儲存和鎖定檔案之外,建議程式應避免在未經使用者同意的情況下在主目錄中建立非點檔案或目錄。
3.8.3 主目錄規範和約定
過去已經做了許多努力來標準化主目錄的佈局,包括XDG基本目錄規範[9]和關於使用者目錄內容的GLib約定。[10]將來有可能在這方面做出更多努力。 為了容納使用這些規範和約定的軟體,分發可以建立遵循規範和約定的目錄層次結構。 這些目錄層次結構可能位於主目錄下。
[9]Found at http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html and http://www.freedesktop.org/wiki/Software/xdg-user-dirs.
[10]A description of GLib's conventions can be found in the documentation for GUserDirectory, at http://developer.gnome.org/glib/unstable/glib-Miscellaneous-Utility-Functions.html#GUserDirectory.
3.9. /lib :基本共享庫和核心模組
3.9.1. 目的
/lib
目錄包含引導系統和在根檔案系統中執行命令所需的共享庫映像,即, 通過/bin
和/sbin
的二進位制檔案[11]
[11] 只對/ usr中的二進位制檔案是必需的共享庫必須不在/lib 內.只有在/ bin和/ sbin中執行二進位制檔案所需的共享庫可能在這裡。特別是,庫libm.so.*
還可以被放置在/usr/lib
,如果沒有在/bin
或/sbin
中沒有任何需要時。
3.9.2 要求
至少需要以下每個檔名之一(它們可以是檔案或符號連結):
File | Description |
---|---|
libc.so.* |
動態連結的C庫(可選) |
ld* |
執行時的連結器/載入器 (可選) |
如果安裝了C前處理器, /lib/cpp必須是對它的引用,這是出於歷史原因。[12]
[12]這個二進位制檔案的通常位置是/usr/bin/cpp
。
3.9.3 具體選擇
如果安裝了相應的子系統,則以下目錄或目錄的符號連結必須位於/lib
:
Directory | Description |
---|---|
modules |
可載入的核心模組(可選) |
3.10. /lib<qual>
: Alternate format essential shared libraries (optional)
系統上可能存在/lib
目錄的一個或多個變體,它們支援多個需要單獨庫的二進位制格式。[13]
[13]這通常用於支援多種二進位制格式但需要同名庫的系統上的64位或32位支援。在這種情況下,/lib32
和/lib64
可能是庫目錄,以及/lib
一個符號連結到他們中的一個。
3.10.2 要求
如果存在一個或多個這些目錄,則其內容的要求與標準的 /lib
目錄相同,除了不需要/lib
外。<qual>
/cpp
3.11. /media :可移動媒體的掛載點
3.11.1 目的
此目錄包含子目錄,這些子目錄用作可移動介質(如軟盤,cdroms和zip磁碟)的掛載點。
基本原理
歷史上,有許多其他不同的地方用於安裝可移動媒體,如/cdrom
, /mnt
或/mnt/cdrom
。 將所有可移動介質的掛載點直接放在根目錄中可能會導致/中存在大量額外目錄。 儘管最近在/mnt
使用子目錄作為掛載點已經很常見了,但它與使用/mnt
直接作為臨時掛載點的更古老的傳統相沖突。
3.11.2. 具體選擇
如果安裝了相應的子系統,則以下目錄或目錄的符號連結必須位於/media
:
Directory | Description |
---|---|
floppy |
軟碟機(可選) |
cdrom |
CD-ROM驅動器(可選) |
cdrecorder |
CD燒錄機(可選) |
zip |
Zip驅動器(可選 |
在存在多個用於安裝特定型別介質的裝置的系統上,可以通過將數字附加到上面以“0”開頭的可用名稱來建立安裝目錄,但是非限定名稱也必須存在。[15]
[15]具有兩個CDROM驅動器的柔性分佈可能具有/media/cdrom0
和/media/cdrom1
與/media/cdrom
符號連結到其中任意一個。
3.12. /mnt :臨時掛載檔案系統的掛載點
3.12.1 目的
提供此目錄,以便系統管理員可以根據需要臨時安裝檔案系統。此目錄的內容是本地問題,不應影響任何程式的執行方式。
安裝程式不得使用此目錄:必須使用系統未使用的合適的臨時目錄。
3.13. /opt : 附加應用程式軟體包
3.13.1 /opt
用於安裝附加應用程式軟體包而保留的
要安裝在/opt
軟體包必須將其靜態檔案放在單獨的/opt/<package>
或/opt/<provider>
目錄樹中,其中<package>
是描述軟體包的名稱, <provider>
是提供商的LANANA註冊名稱。
3.13.2. 要求
Directory | Description |
---|---|
<package> | Static package objects |
<provider> | LANANA registered provider name |
目錄/opt/bin
, /opt/doc
, /opt/include
, /opt/info
, /opt/lib
, and /opt/man
保留供本地系統管理員使用。軟體包可以提供“front-end”檔案,這些檔案旨在由本地系統管理員放置(通過連結或複製)到這些保留的目錄,但必須在沒有這些保留目錄的情況下正常執行。
使用者要呼叫的程式必須位於目錄/opt/<package>/bin
或/opt/<provider>
層次結構中。 如果程式包含UNIX手冊頁,則它們必須位於/opt/<package>/share/man
或/opt/<provider>
層次結構中,並且必須使用與/usr/share/man
相同的子結構。