今天看一篇文章,里面提到了Linux文件系统层次标准(FHS)。之后我就看了FHS。由于本人读英文文章很慢,为了以后方便自己也方便大家,我就把Filesystem Hierarchy Standard翻译了下,可能有的地方不是很到位,请谅解。
如果您看了,觉得对您有点帮组,请支持一下,毕竟翻译该文章也花费了我两星期的业余时间。
如果要转载请注明出处,谢谢。
标准Linux文件系统层次标准(Filesystem Hierarchy Standard)
l 第三章 /usr层次结构
目的:
/usr 是文件系统的第二个主要部分。/usr下的数据是可共享,且只读的。这意味着/usr能够和各种FHS标准兼容的主机共享数据,但是为只读。任何主机相关和随时间变化的数据存储在其他地方。
对于大的软件包,在/usr层次结构下不能使用直接子目录。
要求:
下面的目录或者目录符号链接,应该在/usr下。
目录 描述
bin 绝大多数用户命令。
include C程序头文件。
lib 库文件
local 本地层次结构(在主要安装之后为空(如:重装电脑))
sbin 非关键的系统二进制文件。
share 体系结构无关数据。
特殊选项:
目录 描述
X11R6 X窗口系统,11版第6版。(可选)
game 游戏或教育相关的二进制文件。(可选)
lib<qual> 其他格式的库文件。(可选)
src 源代码。(可选)
因为一个很大的先例和通常都是被接受的,所以有一个是用于X窗口系统特例。
以下目录的符号链接可能会存在。这种可能性是根据要保持与旧系统的兼容性,且它会延续直到所有的实现都被假设使用/var层次结构。
/usr/spool -> /var/spool
/usr/tmp -> /var/tmp
/usr/spool /locks -> /var/lock
一旦系统不再需要上述符号链接,在需要的情况下这些链接会被删除。
/usr/X11R6: X窗口系统,11版第6版。(可选)
目的:
这个目录层次结构是为X窗口系统11版第6版和相关文件保存。
为了简单化问题和使xfree86在不同的系统上与x窗口系统兼容,下边的符号链接必须存在,前提是/usr/X11R6存在。
/usr/bin/X11 –> /usr/X11R6/bin
/usr/lib/X11 -> /usr/X11R6/lib/X11
/usr/include/X11 -> /usr/X11R6/include/X11
一般来说,软件不能通过上述符号链接安装或管理。它们只供用户使用。难的是涉及到的X Window系统的发行版本-----在过渡期时,不可能知道哪个X11发行版正在使用。
特殊选项:
在/usr/X11R6/lib/X11中的特定文件会被解释为演示文件。应用程序需要关于当前主机的信息,必需引用/etc/X11下的配置文件。/etc/X11下的配置文件可能被链接到/usr/X11R6/lib下的相应文件(如:Xconfig, XF86Config, 或 system.twmrc等配置文件)。
/usr/bin: 绝大多数用户命令。
目的:
这是系统可执行命令的主目录。
特殊选项:
如果安装了相应的子系统,那么以下目录或目录符号链接必须位于/usr/bin目录下。
目录 描述
mh MH邮件处理系统命令。(可选)
/usr/bin/X11必需是/usr/X11R6的符号链接,如果后者存在。
如果安装了相应的子系统,那么以下文件或符号链接文件必须位于/usr/bin目录下。
命令 描述
perl 实用报表提取语言(The Practical Extraction and Report Language)。(可选)
python python解释语言。(可选)
tclsh 简单的shell包含tcl解释器。(可选)
wish 简单的tcl/tk窗口shell。(可选)
expect 人机对话程序。(可选)
/usr/include : 标准头文件目录
目的:
这里是系统所有的一般应用的C语言头文件的所在地。
特殊选项:
如果安装了相应的子系统,那么以下目录或目录符号链接必须位于/usr/include目录下。
目录 描述
bsd BSD兼容性头文件。(可选)
/usr/include/X11必需是/usr/X11R6/include/X11的符号链接,如果后者存在。
/usr/lib : 程序和包的库文件
目的:
/usr/lib包含目标文件,库文件,和不能被用户或shell脚本直接运行的内部二进制文件。注:各种系统架构无关的应用程序静态文件和目录必需放在/usr/share中。
应用程序可以使用/usr/lib下的单独的子目录。如果一个应用程序使用了一个子目录,那么所有用于应用程序的架构相关的专用数据必需位于该子目录内。
特殊选项:
由于历史的原因,/usr/lib/sendmail必需是一个/usr/sbin/sendmail的动态链接,如果后者存在的话。
如果/lib/X11存在,usr/lib/X11必需是/lib/X11的动态链接,或者任何/lib/X11是一个动态链接。
/usr/lib<qual> : 其他格式的库文件。(可选)
目的:
/usr/lib<qual>是一种替代二进制格式的库文件,它和/usr/lib扮演一样角色,除了/usr/lib<qual>/sendmail和/usr/lib<qual>/X11不被需要。
/usr/local : 本地层次结构
目的:
/usr/local层次结构由系统管理员用于在本地安装软件。当系统软件升级时它需要被安全的覆盖。它也许用于在一组主机之间共享的程序或数据,且程序和数据不能在/usr下找到。
本地软件安装必需位于/usr/local下而不是/usr,除非软件是用来替换或更新/usr下已有的软件。
要求:
以下目录或符号链接目录,必需位于/usr/local下。
目录 描述
bin 本地二进制文件。
etc 为本地二进制文件的主机特定的系统配置。
games 本地游戏二进制文件。
include 本地C头文件。
man 本地在线帮助。
sbin 本地系统二进制文件。
share 本地体系结构无关层次结构。
src 本地源代码。
第一次安装FHS标准系统,/usr/local没有其他的目录,除了下边列出的目录。
特殊选项:
如果/lib<qual>或/usr/lib<qual>目录存在,那么/usr/local下应该有等价的目录。
/usr/local/etc可能是/etc/local的符号链接。
注意:/usr下的程序的配置文件必需在/etc下,而在/usr/local下的程序配置文件放在/usr/local/etc中。
/usr/local/share
对于该目录的内容要求和/usr/share一样。唯一添加的限制是/usr/local/share/man和/usr/local/man目录必需是同一个(这也就意味着其中一个是一个符号链接)。
/usr/sbin : 非关键的系统二进制文件
目的:
该目录包含一些由系统管理员专用的非关键的系统二进制文件。这些系统管理程序用于修复,系统恢复,挂载/usr。其他关键的应用必需位于/sbin。
/usr/share : 体系结构无关数据
目的:
/usr/share用于存放所有只读的且是架构无关的数据文件。
该层次结构用于在一个给定的操作系统的所有架构平台的数据共享。因此,例如,基于i386,Alpha和PPC硬件平台的网站共同维护一个集中挂载的/usr/share目录。但是请注意,/usr/share通常不会在不同操作系统或是同一个操作系统的不同发行版实现共享。
一些程序或包所包含或需求的数据如果不需要改变,那么它们可以放在/usr/share(或 /usr/local/share,如果安装在本)。建议在/usr/share下用相应的子目录。
游戏数据存储在/usr/share/games下必需确保是纯粹的静态数据。一些可修改的文件,如评分文件,游戏日志等,应该放在/var/games下。
特数据选项:
如果安装了相应的子系统,那么以下目录或目录符号链接必需位于/usr/share。
目录 描述
dict 词汇表。(可选)
doc 杂项文件。(可选)
games 游戏静态文件。(可选)
info GNU信息系统主目录。(可选)
locale 本地信息。(可选)
nls 本地语言支持信息目录。(可选)
sgml SGML数据。(可选)
terminfo terminfo数据库目录。(可选)
tmac troff macros not distributed with groff (optional)
xml XML数据。(可选)
zoneinfo 时区信息和配置。(可选)
建议,特别应用,架构无关目录在/usr/share。这样的目录包括,groff, perl, ghostscript, texmf和kbd(linux)或syscons(BSD)。他们可能被放置在/usr/lib为了向后兼容,这取决于发布商的意愿。类似的,如果发布商愿意,他们可以把一个/usr/lib/game层次结构换到/usr/share/games层次结构中。
/usr/share/dict : 词汇表(可选)
目的:
该目录为系统词汇表的主目录。传统情况这里只包含英文单词文件,这些文件用于look命令和各种拼写规则。单词可以采用美式或英式拼写。
特殊选项:
如果安装了相应的子系统,那么以下文件或文件符号链接必需位于/usr/share/dict。
文件 描述
单词 罗列英文单词。(可选)
其他语言的单词列表被添加要用英文文件名。如,/usr/share/dict/French, /usr/share/dict/danish,等。
其他单词列表必需被包含在这里,如果有的话。
/usr/share/man : 帮助手册页
目的:
本节详细介绍了整个系统手册组织,包括/usr/share/man。同时参考/var/cache/man章节。
手册页存储在<mandir>/<locale>/man<section>/<arch>中。关于<mandir>, <local>, <section>, 和<arch>的解释如下。
每一节的描述如下:
l man1:用户程序可公开访问的命令的描述手册页都包含在此章。绝大多数用户需要用到的程序文档都在这里。
l man2:系统调用手册页,这里描述了所有的系统调用(请求内核执行操作)。
l man3:库函数和子程序,本章描述了不直接调用内核服务的库例程。本章节和第二章节只有程序员会真正的感兴趣。
l man4:特殊文件章节,他描述了特殊文件,有关驱动程序的功能和系统中对网络的支持。典型情况,这里包含在/dev下的设备文件和对网络协议支持的内核接口的描述。
l man5:文件格式,关于绝大数的数据文件的格式记录在这里。这里包括各种头文件,程序输出文件和系统文件。
l man6:游戏,本章介绍游戏,演示和一般简单程序。对于本章节的的重要性,不同的人有着不同的观点。
l man7:杂项手册页,它包含一些难以被分类的手册。Troff和其他文本处理宏包可以在这里找到。
l man8:这里记录了由系统管理员用于系统操作和维护的系统管理程序。其他偶尔被用户用到的程序也记录在这里。
特殊选项:
以下目录或目录符号链接必需位于/usr/share/<mandir>/<locale>,除非他们为空。
目录 描述
man1 用户程序。(可选)
man2 系统调用。(可选)
man3 库函数。(可选)
man4 特殊文件。(可选)
man5 文件格式。(可选)
man6 游戏。(可选)
man7 杂项。(可选)
man8 系统管理。(可选)
规则规定必须在/usr/share/man结构中支持手册页,并且用不同的语言编写。它还规定了这些手册页的存储和引用页。相关因素包括了语言和字符代码集。
语言子目录的命名基于POSIX1003.1标准,该标准描述了本地标示字符----最广为接受方法。<locale>字符串如下:
<language>[_<territory>][.<character-set>[,<version>]
<language>域采用ISO639标准(标示语言名称的代码)。它必须是两字节宽和以小写字母指定
<territory>域在可能的情况下必须采用ISO3166的双字母码(标示国家名的一种规范)。(绝大多数人都熟悉双字母码用于在邮件地址里表示国家代码。)它必须是两字节宽和以大写字母指定。
<character-set>域必须代表描述的字符集的标准,如果<character-set>只是一个数字规范,这个数字代表国际标准字符集描述。如果可能,一般建议该域为一个数字表示,不包括额外的标点符号和一些小写字母。
<version>作为一个参数指定在<character-set>之后,并用一个‘,’隔开。该域用于区分不同的版本用。本标准建议不适用<version>域,除非是必须的。
所有的手册页要采用统一的语言和字符编码命名。<locale>域可能被省略,并存储所有手册页在<mandir>下。例如,采用英语和ASCII编码的手册页直接存储在/usr/share/man下。
国家对此有一个广为接受的标准字符代码集时可以省略<character-set>域,但是强烈建议包括此域,特别是哪些有多个标准竞争的国家。
不同事例:
语言 国家 字符集 目录
English - ASCII /usr/share/man/en
English United Kingdom ISO8859-15 /usr/share/man/en_GB
English United States ASCII /usr/share/man/en_US
French Canada ISO 8859-1 /usr/share/man/fr_CA
French France ISO 8859-1 /usr/share/man/fr_FR
German Germany ISO 646 /usr/share/man/de_DE.646
German Germany ISO6 6937 /usr/share/man/de_DE.6937
German Switzerland ISO 646 /usr/share/man/de_CH
Japanese Japan JIS /usr/share/man/ja_JP.jis
Japanese Japan SJIS /usr/share/man/ja_JP.sjis
Japanese Japan UJIS(or EUC-J /usr/share/man/ja_JP.ujis
类似的,必须制定架构相关的手册页,如关于设备驱动的文档或底层系统管理命令。这类手册页应该位于man<章节>下合适的<arch>目录下。如,关于i386 ctrlaltdel(8)命令的手册页应该位于/usr/share/man/<locale>/man8/i386/ctrlaltdel.8。
/usr/local下的命令和数据的手册页存储在/usr/local/man下。
X11R6的手册页存储在/usr/X11R6/man下。它和系统中位于/usr/share/man下的手册页拥有相同的层次结构。
/usr/share/misc : 各种架构无关的数据
该目录包含各种架构无关文件,他们不需要在/usr/share下有独立的子目录。
特殊选项:
如果相应的子系统被安装了,那么下面的文件或文件符号链接,必须存在于/usr/share/misc中。
文件 描述
ascii ASCII字符集表。(可选)
magic 文本命令的幻数默认列表。(可选)
termcap 终端能力数据库。(可选)
termcap.db 终端能力数据库。(可选)
其他(特定应用)文件可能会出现在这里,但是在发布商的自由载量权下可能将它们放在/usr/lib。
/usr/share/sgml : SGML数据(可选)
目的:
/usr/share/sgml包含架构无关的SGML应用的文件。如,普通目录(不是/etc/sgml下的集中目录)DTDs, 样式表。
特殊选项:
如果相应的子系统被安装了,那么下面的目录或目录符号链接,必须存在于/usr/share/sgml中。
注:(Documnet Type Definition)DTD 文件类型定义。
目录 描述
docbook docbook DTD 。(可选)
tei tei DTD。(可选)
html html DTD。(可选)
mathml mathml DTD。(可选)
其他不是特定的DTD可能发在它们的子目录下。
/usr/share/xml : XML 数据(可选)
目的:
/usr/share/sgml包含架构无关的SGML应用的文件。如,普通目录(不是/etc/sgml下的集中目录)DTDs, 样式表。
特殊选项:
如果相应的子系统被安装了,那么下面的目录或目录符号链接,必须存在于/usr/share/sgml中。
注:(Documnet Type Definition)DTD 文件类型定义。
目录 描述
docbook docbook XML DTD。(可选)
xhtml XHTML DTD。(可选)
mathml MathML DTD。(可选)
/usr/src : 源代码(可选)
目的:源代码可以放在该目录,仅供参考。