文件系统层次结构标准3.0-中文翻译
文件系统层次结构标准
文件系统层次结构标准
LSB Workgroup, The Linux Foundation
Version 3.0
发布日期 March 19, 2015
Copyright©2015 The Linux Foundation
Copyright©1994-2004 Daniel Quinlan
Copyright©2001-2004 Paul ‘Rusty’ Russell
Copyright©2003-2004 Christopher Yeoh
概要
该标准包括一系列在类Unix操作系统中文件和目录放置的需求和指导方针,该方针旨在支持应用程序,系统管理工具,开发工具和脚本的互操作性,以及提升这些系统的文档的一致性。
所有商标和版权归其所有者所有,除非另有特别说明。本文件中使用的术语不应被视为影响任何商标或服务标志的有效性。
如果版权和本许可声明保存在所有副本上,则允许制作和分发本标准的逐字副本。
在逐字复制的情况下,允许复制和分发本标准的修改版本,但是需要在标题页标记为被修改过的,而且包含一个指向原标准的引用,同时要包含检索原始标准的信息,并且,整个产生的派生工作都与此许可通知相同的条件下发布。
在上述修改版本的条件下,允许复制和发布本标准的其他语言译本,但本许可通知可以在由版权所有者批准的译本中声明。
献辞
这个版本是为了纪念Christopher Yeoh,一个长期的朋友和同事,以及FHS的原始编辑之一。没有他的奉献精神,这项工作是不可能完成的。
目录表
- 1 介绍
- 1.1 目的
- 1.2 约定
- 2 文件系统
- 3 根文件系统
- 3.1 目的
- 3.2 必需内容
- 3.3 特定选项
- 3.4 /bin: 基本用户命令二进制文件(供所有用户使用)
- 3.4.1 目的
- 3.4.2 必需内容
- 3.4.3 特定选项
- 3.5 /boot: 引导加载程序的静态文件
- 3.5.1 目的
- 3.5.2 特定选项
- 3.6 /dev: 设备文件
- 3.6.1 目的
- 3.6.2 特定选项
- 3.7 /etc: 特定主机的系统配置
- 3.7.1 目的
- 3.7.2 必需内容
- 3.7.3 特定选项
- 3.7.4 /etc/opt: /opt的配置文件
- 3.7.5 /etc/X11: XWindow系统配置(可选)
- 3.7.6 /etc/sgml: SGML的配置文件(可选)
- 3.7.7 /etc/xml: XML 的配置文件(可选)
- 3.8 /home: 用户主目录(可选)
- 3.8.1 目的
- 3.8.2 必需内容
- 3.8.3 主目录规范和约定
- 3.9 /lib: 基本共享库和内核模块
- 3.9.1 目的
- 3.9.2 必需内容
- 3.9.3 特定选项
- 3.10 /lib<qual>: 另一种格式基本共享库(可选)
- 3.10.1 目的
- 3.10.2 必需内容
- 3.11 /media: 可移动媒体的挂载点
- 3.11.1 目的
- 3.11.2 特定选项
- 3.12 /mnt: 临时挂载系统的挂载点
- 3.12.1 目的
- 3.13 /opt: 附加应用程序软件包
- 3.13.1 目的
- 3.13.2 必需内容
- 3.14 /root: root用户的主目录(可选)
- 3.14.1 目的
- 3.15 /run: 运行时可变数据
- 3.15.1 目的
- 3.15.2 必需内容
- 3.16 /sbin: 系统二进制文件
- 3.16.1 目的
- 3.16.2 必需内容
- 3.16.3 特定选项
- 3.17 /srv: 本系统提供的服务的数据
- 3.17.1 目的
- 3.18 /tmp: 临时文件
- 3.18.1 目的
- 4 /usr的分层结构
- 4.1 目的
- 4.2 必需内容
- 4.3 特定选项
- 4.4 /usr/bin: 大部分用户命令
- 4.4.1 目的
- 4.4.2 必需内容
- 4.4.3 特定选项
- 4.5 /usr/include: 标准包含文件目录
- 4.5.1 目的
- 4.5.2 特定选项
- 4.6 /usr/lib: 程序和软件包的库
- 4.6.1 目的
- 4.6.2 特定选项
- 4.7 /usr/libexec: 由其它程序运行的二进制文件(可选)
- 4.7.1 目的
- 4.8 /usr/lib<qual>: 另一种格式库(可选)
- 4.8.1 目的
- 4.9 /usr/local: 本地层次结构
- 4.9.1 目的
- 4.9.2 必需内容
- 4.9.3 特定选项
- 4.9.4 /usr/local/share: 本地与体系结构无关的层次结构
- 4.10 /usr/sbin: 非基本的标准系统二进制文件
- 4.10.1 目的
- 4.10.2 必需内容
- 4.11 /usr/share: 与体系结构无关的数据
- 4.11.1 目的
- 4.11.2 必需内容
- 4.11.3 特定选项
- 4.11.4 /usr/share/color: 色彩管理信息(可选)
- 4.11.5 /usr/share/dict: 词汇表(可选)
- 4.11.6 /usr/share/man: 手册页
- 4.11.7 /usr/share/misc: 各种与体系结构无关的数据
- 4.11.8 /usr/share/ppd: 打印机定义(可选)
- 4.11.9 /usr/share/sgml: SGML数据(可选)
- 4.11.10 /usr/share/xml: XML数据(可选)
- 4.12 /usr/src: 源代码(可选)
- 4.12.1 目的
- 5 /var层次结构
- 5.1 目的
- 5.2 必需内容
- 5.3 特定选项
- 5.4 /var/account: 进程统计日志(可选)
- 5.4.1 目的
- 5.5 /var/cache: 应用程序缓存数据
- 5.5.1 目的
- 5.5.2 特定选项
- 5.5.3 /var/cache/fonts: 本地生成字体(可选)
- 5.5.4 /var/cache/man: 本地格式化手册页(可选)
- 5.6 /var/crash: 系统崩溃转储(可选)
- 5.6.1 目的
- 5.7 /var/games: 可变游戏数据(可选)
- 5.7.1 目的
- 5.8 /var/lib: 可变状态信息
- 5.8.1 目的
- 5.8.2 必需内容
- 5.8.3 特定选项
- 5.8.4 /var/lib<editor>:编辑器备份文件和状态(可选)
- 5.8.5 /var/lib/color: 颜色管理信息(可选)
- 5.8.6 /var/lib/hwclock: hwclock状态目录(可选)
- 5.8.7 /var/lib/misc: 各种变量数据
- 5.9 /var/lock: 锁文件
- 5.9.1 目的
- 5.10 /var/log: 日志文件和目录
- 5.10.1 目的
- 5.10.2 特定选项
- 5.11 /var/mail: 用户邮箱文件(可选)
- 5.11.1 目的
- 5.12 /var/opt: /opt的可变数据
- 5.12.1 目的
- 5.13 /var/run: 实时可变数据
- 5.13.1 目的
- 5.13.2 必需内容
- 5.14 /var/spool: 应用程序脱机数据
- 5.14.1 目的
- 5.14.2 特定选项
- 5.14.3 /var/spool/lpd: 行打印机守护进程打印队列(可选)
- 5.14.4 /var/spool/rwho: Rwho文件(可选)
- 5.15 /var/tmp: 在系统重启之间保存的临时文件
- 5.15.1 目的
- 5.16 /var/yp: 网络信息服务(NIS)数据库文件(可选)
- 5.16.1 目的
- 6 特定操作系统附录
- 6.1 Linux
- 6.1.1 / : 根目录
- 6.1.2 /bin: 基本用户命令二进制文件(供所有用户使用)
- 6.1.3 /dev: 设备和特殊文件
- 6.1.4 /etc: 特定主机的系统配置
- 6.1.5 /proc: 内核和进程信息虚拟文件系统
- 6.1.6 /sbin: 基本系统二进制文件
- 6.1.7 /sys: 内核和系统信息虚拟文件系统
- 6.1.8 /usr/include: C程序包含的头文件
- 6.1.9 /usr/src: 源代码
- 6.1.10 /var/spool/cron: 定时任务
- 7 附录
- 7.1 FHS邮件列表
- 7.2 FHS背景
- 7.3 一般准则
- 7.4 范围
- 7.5 致谢
- 7.6 贡献者
第1章 介绍
1.1 目的
该标准可以使:
软件可以预测安装文件和目录的位置,并且
用户可以预测安装文件和目录的位置。
我们通过以下方式:
为文件系统的每个区域指定指导规范
指定所需的最小文件和目录
列举原则的例外情况,
列举当与历史冲突时的具体事例
FHS文档可以被以下人员使用:
独立的软件供应商提供符合FHS的应用程序,并与符合FHS的发行版合作
操作系统创造者用于提供与FHS兼容的系统
用户理解和维护系统的FHS合规性
FHS文档范围限制:
本地文件的本地放置是一个本地问题,因此FHS不会试图篡夺系统管理员的工作。
FHS解决了文件放置需要在多方(如本地站点,分发,应用程序,文档等)之间进行协调的问题。
1.2 约定
我们建议你阅读本文档的排版版本,而不是纯文本版本。在排版版本中,文件和目录的名称以固定宽度的字体显示。
不同文件名的组件由包含在“<”和“>” 字符中的内容描述表示,
文件名的可选组件可以用“[”和“]” 括起来,并且可以与“<”和“>” 组合使用。比如,如果一个文件名允许带有或不带扩展名,它可以用 <filename>[.<extension>] 表示。
文件名或目录名中的可变部分用“*” 表示。
标记为Rationale的文本部分是解释性的,而非规范性的。
第2章 文件系统
本标准假定兼容FHS文件系统的操作系统支持与大部分UNIX文件系统中相同的基本安全特性。
可能在文件中定义了两种独立的区别,可共享的和与不共享的,变化的和静态的。通常,在这两个方面存在差异的文件应该放在不同的目录中。这使得在不同文件系统中存放不同用途特征的文件变得很容易。
“可共享”文件是那些存储在一台主机上,并且可以在其它主机上使用的文件,“不可共享”文件是指那些不能共享的文件。比如,用户主目录下的文件是可共享的,但是设备锁文件就是不可共享的。
“静态”文件包含二进制文件,库文件,文档文件和其它没有系统管理员权限不能修改的文件。“可变”文件是非静态的那些文件。
Rotionale
可共享文件可以存储在一台主机上,并在其它主机上使用。然而,通常情况下,并非文件系统层次结构中的所有文件都是可共享的,而且每个系统都有至少包含它自己的不可共享文件的本地存储。如果系统需要的存储在外部主机上的所有文件都可以通过从外部主机上挂载一个或几个目录来获得,那就很方便了。静态文件和可变文件应该分开,因为静态文件与可变文件不同,可以存储在只读媒体上,并且不需要按照与可变文件相同的时间表进行备份。
历史上类UNIX文件系统层次结构在/usr 和/etc目录下都会包含静态文件和可变文件,为了实现上面提到的优点,/var层次结构被创建出来,并且所有的变量文件从/usr转移到/var。因此,/usr 现在可以以只读方式挂载(如果它是一个独立的文件系统)。可变文件已经在技术允许的情况下从/etc 转移到/var 下很长时间了。
下面是兼容FHS系统的一个例子。(也可以是其它符合FHS的布局)
shareable unshareable static /usr
/opt/etc
/bootvariable /var/mail
/var/spool/news/var/run
/var/lock
第3章 根文件系统
3.1 目的
根文件系统必须足以引导,还原,恢复和/或修复系统。
要引导一个系统,根分区上必须有足够的软件和数据来挂载其它文件系统,这包括实用程序,配置,引导加载程序信息,和其它重要的启动数据。/usr、/opt和/var被设计成可以位于其它分区或文件系统上。
为了能够恢复和/或修改系统,经验丰富的维护者用于诊断和重建受损系统所需的那些实用工具必须存在于根文件系统。
为了恢复系统,从系统备份(软盘、磁带等)中恢复所需的那些实用程序必须存在于根文件系统。
Rationale
根文件系统的最低要求应该尽可能小,但不能更小。虽然许多用户可能不希望在分区系统中增加额外的复杂性,但出于以下几个原因,保持根目录尽可能小的选项应该保留下来。
它偶尔会从很小的媒体中挂载。
根文件系统包含很多系统特定的配置文件。可能的例子包括特定于系统的内核,特定的主机等。这意味着根文件系统并不总是可以在联网的系统之间共享。在网络系统中的服务器上保持较小的空间可以最大限度的减小不可共享文件区域的空间损失。它还允许工作站拥有理小的本地硬盘驱动器。
虽然你可能将根文件系统设置在一个大分区上,并且可以随意放置你的内容,但也可能有人使用较小的分区。如果你安装了更多的文件,你可能会发现与其它在较小分区上使用根文件系统的系统不兼容。如果你是一名开发人员,那么你可能会将你的假设转化为大量用户的问题。
导致根文件系统数据错误的磁盘错误往往比其它分区上的错误要严重。小的根文件系统不太容易因为系统崩溃而损坏。
为了能够启动以及从故障中恢复,上述考量必须与最低限度的操作环境相平衡。
应用程序一定不要在根目录中创建或要求特殊文件或子目录。FHS层次结构中的其它位置为任何包提供了足够的灵活性。
Rationale
禁止在根文件系统中创建新的子目录有几个原因:
这样会占用根分区上的空间,出于性能或安全原因,系统管理员可能希望根分区保持小而简单。
它避开了系统管理员为跨可挂载卷分发标准文件层次结构可能建立的规则。
发行版不能在没有仔细考虑包括应用程序可移植性在内的后果的情况下,在根层次结构中创建新目录。
3.2 必需内容
/ 中需要以下目录或目录的符号链接:
目录 | 描述 |
---|---|
bin | 基本命令二进制文件 |
boot | 引导加载程序的静态文件 |
dev | 设备文件 |
etc | 特定主机的配置文件 |
lib | 基本共享库和内核模块 |
media | 可移动媒体的挂载点 |
mnt | 临时挂载文件系统的挂载点 |
opt | 附加应用软件包 |
run | 进程运行相关数据 |
sbin | 基本系统二进制文件 |
srv | 本系统提供的服务的数据 |
tmp | 临时文件 |
usr | 二级层次结构 |
var | 可变数据 |
上面列出的每个目录都会在下面单独小节中详细说明。由于/usr 和/var目录的复杂性,在本文档中将各有一个完整的章节来说明。
3.3 特定选项
如果安装了相应的子系统,下面的目录或目录的符号链接必须在/ 中:
目录 | 描述 |
---|---|
home | 用户主目录(可选) |
lib<qual> | 另一种格式共享库(可选) |
root | 根用户主目录(可选) |
上面列出的每个目录都会在下面单独的小节中详细说明。
3.4 /bin: 基本用户命令二进制文件(供所有用户使用)
3.4.1 目的
/bin 包含系统管理员和用户都可能使用的命令,但是当没有其它文件系统被挂载时(例如在单用户模式下),这些命令是必需的。它也可能包含脚本间接使用的命令1。
3.4.2 必需内容
/bin 中不能有子目录
/bin 中必需有以下命令或命令的符号链接:
命令 | 描述 |
---|---|
cat | 将文件连接到标准输出的程序 |
chgrp | 改变文件所属组的程序 |
chmod | 改变文件访问权限的程序 |
chown | 改变文件所有者和所属组的程序 |
cp | 拷贝文件和目录的程序 |
date | 打印或设置系统数据和时间的程序 |
dd | 转换和拷贝文件的程序 |
df | 报告文件系统磁盘空间使用率的程序 |
dmesg | 打印或控制内核消息缓冲的程序 |
echo | 显示一行文本的程序 |
false | 什么也不做,返回不成功的程序 |
hostname | 显示或设置系统主机名的程序 |
kill | 向进程发送信号的程序 |
ln | 文件间创建链接的程序 |
login | 在系统上开始一个会话的程序 |
ls | 列出目录内容的程序 |
mkdir | 创建目录的程序 |
mknod | 创建声或字符特殊文件的程序 |
more | 文本分页的程序 |
mount | 挂载文件系统的程序 |
mv | 移动或重命名文件的程序 |
ps | 报告进程状态的程序 |
pwd | 打印当前工作目录名称的程序 |
rm | 删除文件或目录的程序 |
rmdir | 删除空目录的程序 |
sed | sed流编辑器 |
sh | 与POSIX兼容的命令行 |
stty | 更改和打印终端行设置的程序 |
su | 改变用户ID的程序 |
sync | 刷新文件系统缓冲的程序 |
true | 什么也不做,返回成功的程序 |
umount | 卸载文件系统的程序 |
uname | 打印系统信息的程序 |
如果/bin/sh本身不是POSIX兼容的shell命令,它必须是一个硬链接或符号链接到真正的shell命令。
[和test命令必须放在/bin或/usr/bin中。
Rationale
当以sh的形式调用时,各种shell的行为是不同的,以便在允许对POSIX进行更改或扩展的同时保持POSIX的兼容性。
将[和test命令包含为二进制文件(即使由shell内部实现)的需求与POSIX.1-2008标准中相同。
3.4.3 特定选项
如果安装了相应的子系统,下面的程序或程序的符号链接必须在/bin中:
命令 | 描述 |
---|---|
csh | Cshell(可选) |
ed | ed编辑器(可选) |
tar | tar存档工具(可选) |
cpio | cpio存档工具(可选) |
gzip | GNU压缩工具(可选) |
gunzip | GNU解压缩工具(可选) |
zcat | GNU解压缩工具(可选) |
netstat | 网络状态工具(可选) |
ping | ICMP网络测试工具(可选) |
/bin/csh 可能是/bin/tcsh或/usr/bin/tcsh的符号链接。
Rationale
tar,gzip和cpio命令已经被添加用于能够恢复系统了(前提是/目录是完整的)。
相反,如果不希望从根分区恢复,则可以忽略这些二进制文件(例如,ROM芯片根,通过NFS挂载 /usr )。如果系统计划通过网络来恢复,那么ftp或tftp(以及获得ftp连接所需的一切)必须在根分区上可用。
3.5 /boot: 启动引导程序的静态文件
3.5.1 目的
该目录包含启动过程所需的所有内容,除了启动时不需要的配置文件和映射安装程序。因此/boot存储在内核开始执行用户模式程序前使用的数据。这可能包括保存的主引导扇区和扇区映射文件。
使引导加载程序能够引导一个文件的程序必须放在/sbin中。引导时不需要引导加载程序配置文件必须放在 /etc中。
3.5.2 特定选项
操作系统内核必须放在/或/boot中。
某些体系结构可能对/boot有其它需求,这些需求与这些体系架构中的特定需求和限制相关。这些需求在些就不一一列举了。发行版可以根据需求添加功能,以支持在这些体系结构上启动系统。
3.6 /dev: 设备文件
3.6.1 目的
/dev目录是特殊文件或设备文件的位置。
3.6.2 特定选项
有可能/dev中的设备需求手动创建,/dev必须包含一个名为MAKEDEV的命令,该命令可以按需创建设备。它还可能包含一个MAKEDEV.local的命令,用于创建本地设备。
如果需要的话,MAKEDEV必须能够创建可以在系统上找到的任何设备,而不仅仅是特定发行版安装的那些设备。
3.7 /etc: 特定主机系统配置
3.7.1 目的
/etc层次结构包含了配置文件,一个配置文件指得是一个用来控制程序操作的本地文件;它必须是静态的并且不能是可执行的二进制文件。2
建议文件存不要直接存放在/etc目录下,而是存放到/etc的子目录下。
3.7.2 必需内容
/etc中不能存放二进制文件。
/etc中必需包含以下目录或目录的符号链接:
目录 | 描述 |
---|---|
opt | 用于/opt的配置 |
3.7.3 特定选项
如果安装了相应的子系统,下面的目录或目录的符号链接必须在/etc中:3
目录 | 描述 |
---|---|
X11 | 用于XWindow系统的配置(可选) |
sgml | 用于SGML的配置(可选) |
xml | 用于XML的配置(可选) |
如果安装了相应的子系统,下列文件或文件的符号链接必须在/etc中:
文件 | 描述 |
---|---|
csh.login | C shelll 登陆的系统级初始化文件(可选) |
exports | NFS文件系统访问控制列表(可选) |
fstab | 关于文件系统的静态信息(可选) |
ftpusers | FTP守护进程用户访问控制列表(可选) |
gateways | 列出路由网关的文件(可选) |
gettydefs | getty使用的速度和终端设置(可选) |
group | 用户组文件(可选) |
host.conf | 主机解析配置文件(可选) |
hosts | 主机名的静态信息(可选) |
hosts.allow | 用于TCP包装器的主机访问文件(可选) |
hosts.deny | 用于TCP包装器的主机访问文件(可选) |
hosts.equiv | 用于rlogin,rsh, rcp的可信主机列表(可选) |
hosts.lpd | lpd的可信主机列表(可选) |
inetd.conf | inetd进程的配置文件(可选) |
inittab | init进程的配置文件(可选) |
issue | 登陆前信息和标识文件(可选) |
ld.so.conf | 用于查询共享库的额外的目录列表(可选) |
motd | 登陆后消息的每日文件(可选) |
mtab | 关于文件系统的动态信息(可选) |
mtools.conf | mtools的配置文件(可选) |
networks | 关于网络名的静态信息(可选) |
passwd | 密码文件(可选) |
printcap | lpd打印机能力数据库(可选) |
profile | sh shell登陆的系统级初始化文件(可选) |
protocols | IP协议清单(可选) |
resolv.conf | 解析器配置文件(可选) |
rpc | RPC协议清单(可选) |
securetty | 用于root用户登陆的TTY访问控制(可选) |
services | 网络服务的端口名称(可选) |
shells | 合法登陆shell的路径名(可选) |
syslog.conf | syslogd程序的配置文件(可选) |
mtab不符合/etc的静态性质:由于历史原因,它被排除在外。4
3.7.4 /etc/opt: 用于/opt的配置文件
3.7.4.1 目的
附加应用程序软件包的特定主机配置文件必须安装在/etc/opt/
3.7.4.2 必需内容
/etc/opt/
如果配置文件必须放在另外的位置才能使软件包正常工作,那么可以将它放到/etc/opt/
Rationale
参阅/opt的Rationale
3.7.5 /etc/X11:用于XWindow系统的配置文件(可选)
3.7.5.1 目的
/etc/X11是所有X11特定主机配置的位置,如果/usr是以只读方式挂载的,那么该目录必须允许进行本地控制。
3.7.5.2 特定选项
如果安装了相应的子系统,那么下列文件或文件的符号链接必须在/etc/X11中:
文件 | 描述 |
---|---|
xorg.conf | 版本7及以上版本的X.org的配置文件(可选) |
Xmodmap | 全局X11键盘修改文件(可选) |
/etc/X11的子目录可能包含xdm和任何其它需要到的程序(例如一些窗口管理器)。5
3.7.6 /etc/sgml: 用于SGML的配置文件(可选)
3.7.6.1 目的
定义SGML系统高级参数的通用配置文件安装在这里,名为*.conf的文件表示通用配置文件。名为*.cat的文件是特定DTD的集中目录,包含对给定DTD所需的所有其它目录的引用。超级目录文件catelog引用了所有集中目录。
3.7.7 /etc/xml: 用于XML的配置文件(可选)
3.7.7.1 目的
定义XML系统高级参数的通用配置文件安装在这里,名为*.conf的文件表示通用配置文件。超级目录文件catelog引用所用集中目录。
3.8 /home: 用户主目录(可选)
3.8.1 目的
/home是一个相当标准的概念,但它显然是一个特定于站点的文件系统6。不同主机的设置不同。因此,任何程序都不应该假定主目录的特定位置,而应该查询它。7
3.8.2 必需内容
应用程序的用户特定配置文件存储在用户的主目录中,该文件以‘.’字符开头(一个“点文件”)。如果应用程序需要创建多个点文件,那么应该将它们放在以‘.’字符开头的目录中(一个“点目录”)。这种情况下,配置文件就不需要以‘.’字符开头了。8
3.8.3 用户主目录规范和约定
过去已经做了很多努力来对主目录的布局进行标准化,包括XDG基本目录规范9和关于用户目录内容的GLIB约定10。今后可能在这方面做出更多的努力。为了适应使用这些规范和约定的软件,发行版可以创建遵循规范和约定的目录层次结构。这些目录层次结构可能位于主目录下。
3.9 /lib: 基本共享库和内核模块
3.9.1 目的
/lib目录包含引导系统和在根文件系统中运行命令所需的共享库镜像,即/bin和/sbin中的二进制文件所信赖的共享库。11
3.9.2 必需内容
以下文件名模式中至少需要一个(它们可能是文件或符号链接):
文件 | 描述 |
---|---|
libc.so.* | C动态链接库(可选) |
ld* | 运行时链接器或加载器(可选) |
如果安装了C预处理器,出于历史原因,/lib/cpp必须是对它的引用。12
3.9.3 特定选项
如果安装了相应的子系统,那么下列目录或目录的符号链接必须在/lib中:
目录 | 描述 |
---|---|
modules | 可加载的内核模块(可选) |
3.10 /lib:另一种格式基本共享库(可选)
3.10.1 目的
在支持多种二进制格式的系统上,/lib 目录因为需要单独的库而存在一个或多个变体。13
3.10.2 必需内容
如果存在一个或多个这样的目录,它们的内容要求除了不需要/lib
3.11 /media:可移动媒体的挂载点
3.11.1 目的
这个目录包含了那些用做可移动媒体例如软盘,光盘和zip磁盘的设备的挂载点的子目录。
Rationale
历史上有很多不同的地方用来挂载可移动媒体,如/cdrom,/mnt或/mnt/cdrom。将所有可移动媒体挂载点直接放到根目录下可能导致在/中出现很多多余的目录。尽管在/mnt中使用子目录作为挂载点现在已经很常见了,但它与直接使用/mnt作为临时挂载点的古老传统相冲突。
3.11.2 特定选项
如果安装了相应的子系统,那么下面的目录或目录的符号链接必须在/media中:
目录 | 描述 |
---|---|
floppy | 软盘驱动器(可选) |
cdrom | 光驱驱动器(可选) |
cdrecorder | 刻录机(可选) |
zip | Zip驱动器(可选) |
在某种类型媒体存在多个设备的系统上,可能通过在上面可用设备名称后附加一个从‘0’开始的数字来创建挂载目录,但非限定名称也必须存在。15
3.12 /mnt:临时挂载文件系统的挂载点
3.12.1 目的
这个目录被用来让系统管理员按照需要临时挂载文件系统。此目录的内容是本地问题,不应影响任何程序的运行方式。安装程序不能使用此目录:必须使用系统不使用的合适的临时目录。
3.13 /opt:附加应用程序软件包
3.13.1 目的
/opt预留用于安装附加应用程序软件包。
安装在/opt中的包必须将其静态文件放到单独的/opt/
3.13.2 必需内容
目录 | 描述 |
---|---|
<package> | 静态包对象 |
<provider> | LANANA注册提供商名称 |
/opt/bin,/opt/doc,/opt/include,/opt/info,/opt/lib和/opt/man这些目录是预留给本地系统管理员便利的。包可以提供“前端”文件由本地系统管理员(通过链接或复制)放置在这些保留目录中,但必须在没有这些保留目录的情况下正常工作。
由用户调用的程序必须位于目录/opt/
可变的包文件(正常情况下的变化)必须安装在/var/opt下。更多信息请参见/var/opt部分。
特定主机的配置文件必须安装在/etc/opt下。更多信息请参见/etc部分。
不允许在/opt,/var/opt,和/etc/opt层次结构之外存在其它包文件,除非那些包文件必须在文件系统树的特定位置才能正常工作。例如,设备锁文件必须放在/var/lock下,设备必须放在/dev下。
发行版可以在/opt中适当注册和的子目录下安装和管理软件。
Rationale
在UNIX社区中,使用/opt来存放附加软件是一种成熟的做法。SystemV应用程序二进制接口[AT&T1990],基于SystemV接口定义(第三版),提供了一个/opt的结构,非常类似这里的定义。
Intel二进制兼容性标准v.2(iBSC2)也提供了非常类似/opt的结构。通常来讲,一个系统上支持包运行的所有数据都必须放在/opt/<package>中,包括准备复制到/etc/opt/<package>中和/var/opt/<package>中以及/opt的保留目录中的文件。
使用/opt的发行版有一些限制是必要的,因为发行版安装的软件和本地安装的软件之间可能会发生冲突,特定是当一些二进制软件中存在固定路径名的情况下。
/opt/<provider>下面的目录结构由软件的打包者负责,不过建议将包安装在/opt/<provider>/<package>中,并且遵循/opt/<package>指南类似的结构。背离这种结构的一个有效原因是支持包可能安装将文件安装在/opt/<provider>/lib或/opt/<provider>/lib中。
3.14 /root:根用户的主目录(可选)
3.14.1 目的
根账户的主目录可以由开发人员或本地首选项确定,但这里是推荐的默认位置。16
3.15 /run:运行时可变数据
3.15.1 目的
此目录包含描述系统从启动以来的系统信息数据。这个目录下的文件必须在启动过程开始时被清除(适当地删除或截断)。
这个目录的用途曾经是由/var/run提供的。通常,程序可以继续使用/var/run来满足/run为向后兼容而设定的要求。已经迁移到使用/run的程序应该停止使用/var/run,除非在/var/run一节中提到。
程序可以有/run的子目录,鼓励那些有多个运行时文件的程序这样做。用户也可以有/run的子目录,但是必须谨慎限制访问权限,以防止未经授权使用/run本身和其它子目录。17
3.15.2 必需内容
进程标识符(PID)文件,原来放在/etc下,现在要放在/run下。PID文件的命名约定是<program-name>.PID。例如,crond PID文件名为/run/crond.PID。 PID文件的内部格式保持不变。该文件必须包含用ascii编码的十进制格式的进程标识符,后跟换行符。比如,如果crond进程号是25,那么/run/crond.pid文件包含三个字符:2,5,和换行符。
读取PID文件的程序应该在接受内容方面有一定的灵活性;就是说,它们应该忽略额外的空格,前导零,末尾换行符缺失或PID文件中的额外行。创建PID文件的程序应该使用上面提到的简单规范。
维护临时UNIX域套接字的系统程序必须将它们放在这个目录或上面提到的相应的子目录中。
3.16 /sbin: 系统二进制文件
3.16.1 目的
用于系统管理的实用程序(和其它仅用于根目录的命令)存储在/sbin,/usr/sbin,和/usr/local/sbin中。除了/sbin中的二进制文件18外,/sbin中还包括启动,重建,恢复和/或修复系统所必需的二进制文件。在/usr被挂载之后(当没有问题的时候)执行的程序通常放置在/usr/sbin中。本地安装的系统管理程序应该放在/usr/local/sbin目录下。19
3.16.2 必需内容
/sbin目录中不能有子目录。
/sbin中必须要有以下命令或命令的符号链接:
命令 | 描述 |
---|---|
shutdown | 关闭系统的命令 |
3.16.3 特定选项
如果安装了相应的子系统,那么下列文件或文件的符号链接必须在/sbin中:
命令 | 描述 |
---|---|
fastboot | 不进行磁盘检查直接重启系统(可选) |
fasthalt | 不进行磁盘检查直接关闭系统(可选) |
fdisk | 分区表操作器(可选) |
fsck | 文件系统检查和修复工具(可选) |
fsck.* | 特定系统的文件系统检查和修复工具(可选) |
getty | getty程序(可选) |
halt | 关闭系统命令(可选) |
ifconfig | 配置网络接口(可选) |
init | 初始进程(可选) |
mkfs | 构建文件系统的命令(可选) |
mkfs.* | 构建特定文件系统的命令(可选) |
mkswap | 设置交换区域的命令(可选) |
reboot | 重启系统的命令(可选) |
route | IP路由表工具(可选) |
swapon | 启动分页和交换(可选) |
swapoff | 关闭分页和交换(可选) |
update | 定期刷新文件系统缓冲区的守护进程(可选) |
3.17 /srv:本系统提供的服务的数据
3.17.1 目的
/srv包含该系统提供的特定站点的数据。
Rationale
这样说明的主要目的是为了让用户能够找到特定服务的数据文件位置,从而合理的放置那些需要为只读文件,可写文件和脚本(如cgi脚本)设置一棵树结构的服务。只有特定用户感兴趣的数据应该放在该用户的主目录中。如果数据的目录和文件结构没有公开给使用者,那么它应该放在/var/lib中。
用于命名/srv子目录的方法还没有具体说明,因为目前还没有就如何命名达成共识。在/srv下构造数据的一种方法是根据协议,比如:ftp,rsync,www,和cvs。在大型系统上,根据管理功能上下文来构造/srv是很有用的,例如/srv/physics/www,/srv/compsci/cvs,等等。不同主机的设置不同。因此,任何程序都不应该依赖/srv下的特定子目录或存储于/srv中的必要数据是否存在为依据。然而,/srv应该始终存在于符合FHS的系统上,并且应该用作此类数据的默认位置。
发行版必须注意,在没有管理员许可的情况下,不要删除这些中的本地文件。20
3.18 /tmp:临时文件
3.18.1 目的
需要临时文件的程序必须能够使用/tmp目录。
程序不能假定/tmp中的任何文件或目录在程序调用间都保留了下来。
Rationale
IEEE标准POSIX.1-2008列出了与上述部分类似的要求。
虽然存储在/tmp中的数据可能会以特定站点的方式删除,但建议在系统启动的时候删除/tmp中的文件和目录。
FHS在历史先例和惯例的基础上增加了这一建议,但并没有将其作为一个要求,因为系统管理不在这个标准的范围内。
注:
1:不需要放在/bin目录下的命令二进制文件必须放在/usr/bin目录下,只被非根用户(XWindow系统,chsh等)使用的项通常并不重要,不需要放在根分区。
2:明确地说,/etc可能包含可执行脚本,例如被init进程调用来启动和关闭系统以及启动守护进程的命令脚本。在这里“可执行二进制文件”指得是不以人类可读格式(如原生ELF可执行格式)编写的直接机器码或伪代码。
3:使用shadow密码套件的系统将在/etc(/etc/shadow等)中有额外的配置文件,在/usr/sbin中有程序(useradd, usermod等)。
4:在一些Linux系统上,这可能是一个到/proc/mount的符号链接,这种情况下,不需要这个例外。
5:/etc/X11/xdm保存了xdm的配置文件,这些配置以前存放在/usr/lib/X11/xdm中。xdm的一些本地可变数据存储在/var/lib/xdm中。
6:不同的人喜欢把用户帐户信息放到不同的地方。本节只是描述用户主目录的建议位置;尽管如此,我们还是建议所有兼容FHS的发行版将此作为用户主目录的默认位置。为管理目的而创建的非登陆帐户通常在其它地方有其主目录。
在较小型的系统上,每个用户的主目录通常被实现为直接在/home下的子目录,例如/home/smith、 /home/torvalds、 /home/operator等。在大型系统上(特别是当许多主机使用NFS共享/home目录时),细分用户home目录非常有用。细分可以通过使用子目录来完成,例如/home/staff、/home/ guests、/home/students等。
7:要查找用户的主目录,使用库函数如getpwent, getpwent r of fgetpwent,而不是依赖/etc/passwd,因为用户信息可能通过使用NIS等系统远程存储。
8:建议,除了自动保存和锁定文件外,程序应该避免在没有用户同意的情况下在主目录中创建非点文件或目录。
9:可在http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html和http://www.freedesktop.org/wiki/Software/xdg-user-dirs找到。
10:关于GLib的约定的描述可以在GUserDirectory的文档中找到,网址是http://developer.gnome.org/glib/unstable/glibMiscellaneous-Utility-Functions.html#GUserDirectory。
11:只对/usr中的二进制文件(比如任何X Window二进制文件)需要的共享库不能放在/lib中。只有在/bin和/sbin中运行二进制文件所需的共享库可能在这里。特别是libm.so.* 也可以放在/usr/lib中,如果它不是/bin或/sbin中的任何东西所需要的。
12:这个二进制文件通常的放置位置是/usr/bin/cpp。
13:这个通常是用来给那些支持多种二进制格式但却需要相同名字的库的系统来提供64位或32位支持的。这种情况下,/lib32和/lib64可能是库的目录,并且/lib是它们中的一个的符号链接。
14:/lib<qual>/cpp仍然是允许的;这和允许/lib和/lib<qual>(一个是另一个的符号链接)是相同的情况。
15:一个兼容的带有两个CDROM驱动器的发行版可能会有/media/cdrom0和/media/cdrom1,而/media/cdrom是其中一个的符号链接。
16:如果根帐户的主目录没有存储在根分区上,那么有必要确保如果无法找到它,它将默认为/。
我们建议不要将root帐户用于可以作为非特权用户执行的任务,并且仅用于系统管理。由于这个原因,我们建议邮件和其他应用程序的子目录不要出现在根帐户的主目录中,并且将用于管理角色(如根、邮政管理员和web管理员)的邮件转发给适当的用户。
17:对于没有特权的用户,/run不应该是可写的;如果任何用户都可以在这个目录中进行写操作,这将是一个重大的安全问题。用户特定的子目录应该只能由每个目录的所有者写。
18:最初,/sbin的二进制文件保存在/etc中。
19:决定哪些内容进入“sbin”目录很简单:如果普通用户(不是系统管理员)将直接运行它,那么它必须被放置在“bin”目录之一。普通用户不应该在其路径中放置任何sbin目录下的东西。
例如,用户偶尔使用的chfn等文件仍然必须放在/usr/bin中。Ping,尽管它对于root(网络恢复和诊断)是绝对必要的,但用户经常使用它,因此必须驻留在/bin中。
我们建议用户对/sbin中的所有程序都具有读取和执行权限,可能某些setuid和setgid程序除外。创建/bin和/sbin之间的分区不是出于安全原因,也不是为了防止用户看到操作系统,而是为了在每个人都使用的二进制文件和主要用于管理任务的二进制文件之间提供一个良好的分区。禁止用户使用/sbin并没有内在的安全优势
20:这一点特别重要,因为这些区域通常包含由分发者最初安装的文件和那些由管理员添加的文件。
第4章 /usr层次结构
4.1 目的
/usr是文件系统的第二个主要部分。/usr是可共享的,只读数据。这意味着/usr应该能够在各种兼容FHS的主机间共享,并且不能被写入。任何特定主机或随时间变化的信息要存储在其它地方。
大型软件包不能使用/usr层次结构下的直接子目录。
4.2 必需内容
/usr中需要有以下目录或目录的符号链接:
目录 | 描述 |
---|---|
bin | 大部分用户命令 |
lib | 库 |
local | 本地层次结构(主安装结束后为空) |
sbin | 非必要的系统二进制文件 |
share | 体系架构无关数据 |
4.3 特定选项
目录 | 描述 |
---|---|
games | 游戏和教育二进制文件(可选) |
include | C程序需要包含的头文件 |
libexec | 由其它程序运行的二进制文件(可选) |
lib<qual> | 另一种格式库(可选) |
src | 源代码(可选) |
X Window系统是一个例外,因为它有相当多的先例和被广泛接受的实践。 可能会出现以下指向目录的符号链接,这种可能性是基于保持与旧系统的兼容性需要,直到所有发行版都假定使用/var层次结构。
/usr/spool -> /var/spool
/usr/tmp -> /var/tmp
/usr/spool/locks -> /var/lock
一旦系统不再需要上面任意一个符号链接,那么如果需要的话可以删除该链接。
4.4 /usr/bin:大部分用户命令
4.4.1 目的
这是系统上可执行命令的主目录。
4.4.2 必需内容
/usr/bin中不能有子目录。
4.4.3 特定选项
如果相应子系统被安装了的话,下列文件或文件的符号链接必须在/usr/bin中:
命令 | 描述 |
---|---|
perl | 实用的提取和报告语言(可选) |
python | Python解释语言(可选) |
tclsh | 包含Tcl解释器的简单的Shell(可选) |
wish | 简单的Tcl/Tk窗口Shell(可选) |
expect | 交互式对话程序(可选) |
Rationale
在许多可执行脚本中,被调用的解释器通常是由脚本第一行的#!path_to_interpreter来指定的。为了使脚本在不同系统间可移植,将解释器位置进行标准化是有好处的。shell解释器已经固定在/bin中,但Perl,Python,Tcl和expect的解释器可能安装在不同的位置。这里指定的位置可以是指向解释器物理位置的符号链接。
4.5 /usr/include:标准包含文件目录
4.5.1 目的
系统中所有用于C编程语言的通用包含文件都应该放在这里
4.5.2 特定选项
如果安装了相应的子系统,那么下列目录或目录的符号链接必须在/usr/include中:
目录 | 描述 |
---|---|
bsd | BSD兼容包含文件(可选) |
4.6 /usr/lib:用于编程和包的库
4.6.1 目的
/usr/lib包含了对象文件和库。1在某些系统上,它可能包含不想让用户或脚本直接执行的内部二进制文件。2
应用程序可以使用/usr/lib下的单独的子目录。如果应用程序使用了子目录,那么所有依赖于体系架构的专用数据都必须放在该目录下。3
4.6.2 特定选项
由于历史原因,/usr/lib/sendmail必须是一个符号链接,它解析为系统的邮件传输代理提供的sendmail-compatible命令,如果后者存在的话。4 5
4.7 /usr/libexec:被其它程序运行的二进制文件(可选)
4.7.1 目的
/usr/libexec包含了不想让用户或脚本直接执行的内部二进制文件。应用程序可以使用/usr/libexec下的单独的子目录。
以这种方式使用/usr/libexec的应用程序不能同时使用/usr/lib来存储内部二进制文件,尽管它们可以使用/usr/lib来实现本文提到的其它目的。
Rationale
本文档以前的一些版本不支持/usr/libexec,尽管它是许多环境中的实践标准6。为了适应这个限制,通常使用/usr/lib来代替。这两种实践现在都可以接受,但是每个应用程序必须选择其中一种方式来组织自己。
4.8 /usr/lib<qual>:另一种格式库(可选)
4.8.1 目的
对于另一种二进制格式,/usr/lib<qual>与/usr/lib扮演相同的角色,除了不需要符号链接/usr/lib<qual>/sendmail和/usr/lib<qual>/X11。7
4.9 /usr/local:本地层次结构
4.9.1 目的
/usr/local层次结构供系统管理员在本地安装软件时使用。当系统软件更新时,它需要被安全地覆盖。它可以用于在一组主机之间共享但在/usr中找不到的程序和数据。
本地安装的软件必须放在/usr/local中而不是/usr中,除非是为了替换或升级/usr中的软件而安装。8
4.9.2 必需内容
/usr/local中必须包含下列目录或目录的符号链接:
目录 | 描述 |
---|---|
bin | 本地二进制文件 |
etc | 本地二进制文件的特定于主机的系统配置 |
games | 本地游戏二进制文件 |
include | 本地C头文件 |
lib | 本地库 |
man | 本地在线手册 |
sbin | 本地系统二进制 |
share | 本地与体系结构无关的层次结构 |
src | 本地源代码 |
在第一次安装了兼容FHS的系统后,除了下面列出的目录,没有其它目录在/usr/local中。
4.9.3 特定选项
如果目录/lib<qual>或/usr/lib<qual>存在,则/usr/local中也必须存在相应的目录。
/usr/local/etc可能是/etc/local的符号链接。
Rationale
/usr/local/etc的一致性对安装程序是有益的,并且已经在其它系统中使用了。由于/usr/local下的所有内容都需要备份来重建系统,因此不会带来额外的维护开销,但如果系统希望所有的配置都放在一个层次结构中,那么使用到/etc/local的符号链接是合适的。
注意/usr/etc仍然是不允许的,/usr下的程序应该把配置文件放到/etc下。
如果目录/usr/share/color按本文档指定的方式存在,那么目录/usr/local/share/color也必须存在,并且遵循与/usr/share/color相同的规则。
Rationale
这种用法允许系统管理员在需要时手动安装颜色配置文件。
4.9.4 /usr/local/share:本地架构无关的层次结构
该目录的内容要求与/usr/share相同。
4.10 /usr/sbin:非必要的标准系统二进制文件
4.10.1 目的
此目录包含系统管理员专用的非必要的二进制文件。系统修复,系统恢复,挂载/usr,或其它重要功能所需要的系统管理程序必须放在/sbin中。9
4.10.2 必需内容
/usr/sbin下不能有子目录。
4.11 /usr/share:体系架构无关数据
4.11.1 目的
/usr/share层次结构是给所用只读的与体系架构无关的数据文件使用的。10
这个层次结构旨在在给定操作系统的所有架构平台之间共享;因此,例如,一个拥有i386,Alpha和PPC平台的站点可能会维护一个集中挂载的/usr/share目录。但是请注意,/usr/share通常不打算由不同的操作系统或同一操作系统的不同版本共享。
任何包含或需要不用修改的数据的程序或包都应该将这些数据存储在/usr/share(或/usr/local/share,如果是本地安装的话)中。为此,建议在/usr/share中使用子目录。使用单独文件的应用程序可以使用/usr/share/misc。
存储在/usr/share/games中的游戏数据必须是纯静态数据。任何可修改的文件,比如分数文件,游戏日志等等,都应该放在/var/games中。
4.11.2 必需内容
/usr/share中必须包含经下目录或目录的符号链接:
目录 | 描述 |
---|---|
man | 在线手册 |
misc | 与体系架构无关的杂项数据 |
4.11.3 特定选项
如果安装了相应的子系统,那么下列目录或目录的符号链接必须在/usr/share中:
目录 | 描述 |
---|---|
color | 颜色管理信息(可选) |
dict | 词汇表(可选) |
doc | 各种文档(可选) |
games | /usr/games的静态数据文件(可选) |
info | GNU信息系统的主目录(可选) |
locale | 区域设置信息(可选) |
nls | 本地语言支持的消息目录(可选) |
ppd | 打印机定义(可选) |
sgml | SGML数据(可选) |
terminfo | 终端数据库的目录(可选) |
tmac | 不与groff一起分发的troff宏(可选) |
xml | XML数据(可选) |
zoneinfo | 时区信息与配置(可选) |
建议将特定于应用程序的,与体系结构无关的目录放在这里。这些目录包括groff, perl, ghostscript, texmf, 和kbd(Linux)或syscons(BSD)。但是,为了向后兼容,它们可以被放在/usr/lib中,这是由分发者决定的。类似的,如果分发者希望将一些游戏数据放在/usr/share/games层次结构之外,那么也可以使用/usr/lib/games层次结构。
4.11.4 /usr/share/color:颜色管理信息(可选)
4.11.4.1 目的
此目录是系统安装的ICC颜色管理文件的主目录
4.11.4.2 特定选项
如果安装了相应的子系统,那么下列目录必须在/usr/share/color中:
目录 | 描述 |
---|---|
icc | ICC颜色配置文件(可选) |
顶级目录/usr/share/color不能包含任何文件;所有文件都应该在/usr/share/color的子目录下。
4.11.5 /usr/share/dict:词汇表(可选)
4.11.5.1 目的
这个目录是系统中词汇表的主目录;传统上这个目录只包含英语单词文件,look(l)和各种拼写程序都使用这个文件。单词可以使用美式拼写或英式拼写。
Rationale
只有词汇表放在这里的原因是,它们是所有拼写检查程序共同的唯一文件。
4.11.5.2 特定选项
如果安装了相应的子系统,那么下列文件或文件的符号链接必须在/usr/share/dict中:
文件 | 描述 |
---|---|
words | 英语单词表(可选) |
需要美式和英式拼定的站点可能会将works链接到/usr/share/dict/american-englist或/usr/share/dict/british-englist。
其它语言的单词表可以使用该语言的英文名称来添加。例如:/usr/share/dict/french,/usr/share/dict/danish,等等。如果可能的话,它们应该使用基于Unicode的字符集,首选是UTF-8字符集。
如果有的话,其它单词列表也必须放在这里。
4.11.6 /usr/share/man:手册页
4.11.6.1 目的
本节详细介绍了整个系统手册页的组织形式,包括/usr/share/man。也请参考/var/cache/man一节。
系统的主<mandir>是/usr/share/man。/usr/share/man包含了/和/usr文件系统下的命令和数据的手册信息。11
手册页存储在<mandir>/<locale>/man<section>/<arch>中。下面给出了<mandir>、<locale>、<section>和<arch>的解释。
每部分的描述如下:
-
man1:本章包含描述公开可访问命令的用户程序手册页。用户需要使用的大多数程序文档都位于这里。
-
man2:系统调用,本节描述的是所有的系统调用(内核执行操作的请求)。
-
man3:库函数和子例程,第三节描述了不直接调用内核服务的程序库例程。本节和第二节只有程序员感兴趣。
-
man4:特殊文件,第四节描述了特殊文件,相关驱动程序和系统的组网支持。通常,这包括在/dev中找到的设备和网络协议支持的内核接口。
-
man5:文件格式,许多数据文件格式在第5节中有说明。这包括各种包含文件,程序输出文件和系统文件。
-
man6:游戏,这一节记录了游戏,演示和一般的小程序。不同的人对这里的重要性有不同的看法。
-
man7:杂项,难以分类的手册页被指定为第7节。在这里可以找到troff和其它文本处理宏包。
-
man8:系统管理员用于系统操作和维护的系统管理程序记录在这里。其中一些程序对普通用户有时也很有用。
4.11.6.2 特定选项
以下目录或目录的符号链接必须存在/usr/share/
目录 | 描述 |
---|---|
man1 | 用户程序(可选) |
man2 | 系统调用(可选) |
man3 | 库函数(可选) |
man4 | 特殊文件(可选) |
man5 | 文件格式(可选) |
man6 | 游戏(可选) |
man7 | 杂项(可选) |
man8 | 系统管理(可选) |
<section>组件描述了手册部分。
必须在/usr/share/man中的结构作出规定,以支持那些使用不同语言编写的手册页。这些规定必须考虑到这些手册页的存储和引用。相关因素包括语言(包括基于地理差异)和字符代码集。
/usr/share/man的语言子目录的命名方式基于POSIX1003.1标准的附录E,附录E描述了地区标识字符串—这是描述文化环境的最普遍接受的方法。<local>字符串是:
<language>[_<territory>][.<character-set>][,<version>]
<language>字段必须取自ISO639(语言名称的表示码)。它必须是两个字符宽,并指定只有小写字母。
如果可能的话,<territory>字段必须是ISO3166(国家区域的表示规范)的两字符编码。(大多数人都熟悉的电子邮件地址中的两个字母组成的国家/区域编码)。它必须是两个字符宽,并且指定用大写字母。13
<character-set>字段必须表示描述字符集的标准。如果<character-set>只是一个数字规范,那个这数字表示描述字符集国际标准的数。如果可能的话,建议使用数字表示(特别是ISO标准),不包含额外的标点符号,并且所有字母都是小写。
指定配置文件的<version>的参数可以放在<character-set>字段之后,由逗号分隔。这可能被用来区分不同的文化需求;比如,字典顺序与更面向系统的核对顺序。该标准建议非必要不使用<version>字段。
对所有手册页使用唯一语言和代码集的系统可能会忽略<locale>子串,而将所有手册页存储在<mandir>中。比如,只有用ASCII编码的英文手册页的系统,可以将手册页(即man<section>目录)直接放在/usr/share/man中。(事实上,这也是传统的情况和安排)。
具有被广泛接受的标准字符代码集的国家可以省略<character-set>字段,但强烈建议将其包括在内,特别是对于具有多个不同标准的国家。
几个例子:
Language | Territory | Character Set | 目录 |
---|---|---|---|
English | —- | ASCII | /usr/share/man/en |
English | United Kingdom | Unicode UTF-8 | /usr/share/man/en_GB10646 |
English | United States | ASCII | /usr/share/man/en_US |
French | Canada | ISO8859-1 | /usr/share/man/fr_CA.88591 |
French | France | ISO8859-1 | /usr/share/man/fr_FR.88591 |
German | Germany | ISO646 | /usr/share/man/de_DE.646 |
German | Germany | ISO6937 | /usr/share/man/de_DE.6937 |
German | Germany | ISO8859-1 | /usr/share/man/de_DE.88591 |
German | Switzerland | ISO646 | /usr/share/man/de_CH.646 |
Japanese | Japan | JIS | /usr/share/man/ja_JP.jis |
Japanese | Japan | SJIS | /usr/share/man/ja_JP.sjis |
Japanese | Japan | UJIS(或EUC-J) | /usr/share/man/ja_JP.ujis |
Japanese | Japan | Unicode UTF-16 | /usr/share/man/ja_JP.10646 |
类似地,必须提供依赖于体系结构的手册页,例如关于设备驱动程序或低级系统管理命令的文档。这些必须放在相应man<section>目录的一个<arch>目录下;比如,i386架构的ctrlaltdel(8)命令要放在/usr/share/man/<locale>/man8/i386/ctrlaltdel.8中。
/usr/local下的命令和数据的手册页存储在/usr/local/man或/usr/local/share/man中。系统中的所有手册页层次结构都必须与/usr/share/man具有相同的结构,因为使用手册页内容的命令需要使用这种结构。14
包含格式化手册页条目的cat页(cat<section>)也可以在<mandir>/<locale>中找到,但这不是必须的,也不能将它们分发给nroff源手册页。 编号部分“1”到“8”是按照传统意义上定义的。通常,位于特定节中的手册页的文件名以.<section>结尾。
此外,一些大型的特定应用程序的手册页集会在手册页文件名后一个后缀。例如,MH邮件处理系统手册页必须在所有MH手册后添加mh后缀。所有X Window系统手册页要在文件名后添加x。
将不同语言手册页放在/usr/share/man下的适当子目录的做法也适用于其它手册页层次结构,如/usr/local/man。(标准的这一部分也适用于后面可选的/var/cache/man结构部分)
4.11.7 /usr/share/misc:各种体系结构无关数据
这个目录包含了那些不需要在/usr/share下拥有一个单独的子目录的各种与体系结构无关的文件。
4.11.7.1 特定选项
如果安装了相应的子系统,那么下面的文件或文件的符号链接,必须在/usr/share/misc中:
文件 | 描述 |
---|---|
ascii | ASCII字符集表(可选) |
termcap | 终端能力数据库(可选) |
termcap.db | 终端能力数据库(可选) |
其它(特定于应用程序)的文件也可能出现在这里,但发行者可以自行决定将它们放在/usr/lib中。15 16
4.11.8 /usr/share/ppd:打印机定义(可选)
4.11.8.1 目的
/usr/share/ppd中包含了PostScript Printer Definition(PPD)文件,许多打印系统使用这些文件作为打印机驱动的描述。PPD文件可以放在这个目录中,也可以放在子目录中。
4.11.9 /usr/share/sgml:SGML数据(可选)
4.11.9.1 目的
/usr/share/sgml中包含供SGML程序使用的与体系结构无关的文件,比如普通目录(不是集中式目录,请参见/etc/sgml),DTDs,实体,或样式表。
4.11.9.2 特定选项
如果安装了相应的子系统,那么下列目录或目录的符号链接必须在/usr/share/sgml中:
目录 | 描述 |
---|---|
docbook | docbook DTD(可选) |
tei | tei DTD(可选) |
html | html DTD(可选) |
mathml | mathml DTD(可选) |
其它非特定于给定DTD的文件可以放在它们自己的子目录中。
4.11.10 /usr/share/xml:XML数据(可选)
4.11.10.1 目的
/usr/share/xml中包含供XML程序使用的与体系结构无关的文件,比如普通目录(不是集中式目录,请参见/etc/sgml),DTDs,实体,或样式表。
4.11.10.2 特定选项
如果安装了相应的子系统,那么下列目录或目录的符号链接必须在/usr/share/xml中:
目录 | 描述 |
---|---|
docbook | docbook XML DTD(可选) |
xhtml | XHTML DTD(可选) |
mathml | MathML DTD(可选) |
4.12 /usr/src:源代码(可选)
4.12.1 目的
源代码可以放在这个子目录中,仅供参考。17
注:
1:很多与体系结构无关的特定应用程序的静态文件和子目录必须放在/usr/share中。
2:关于可执行二进制文件的/usr/libexec和/usr/libexec,请参阅下面的/usr/libexec部分。
3:例如,Perl 5模块和库的perl5子目录。
4:一些可执行命令,如makewhatis和sendmail,也被传统地放在/usr/lib.Makewhatis是一个内部二进制文件,必须放在二进制目录中;用户只能访问catman。较新的sendmail二进制文件现在默认放置在/usr/sbin中。此外,使用与sendmail兼容的邮件传输代理的系统必须提供/usr/sbin/sendmail作为sendmail命令,或者作为可执行文件本身,或者作为到适当的可执行文件的符号链接。
5:X Window系统的主机特定数据不能存储在/usr/lib/ x11中。特定于主机的配置文件(如xorg.conf)必须存放在/etc/ x11中。这包括配置数据,如system.twmrc即使它只是一个到全局配置文件(可能在/usr/lib/X11中)的符号链接。
6:例如,请看自由软件基金会的“GNU编码标准”。
7:如果/usr/lib和/usr/lib
8:放置在/或/usr中的软件可能会被系统升级覆盖(尽管我们建议发行版在这种情况下不要覆盖/etc中的数据)。因此,没有充分的理由,本地软件不能被放置在/usr/local之外。
9:本地安装的系统管理程序应该放在/usr/local/sbin目录下。
10:这些数据大部分最初存放在/usr(man, doc)或/usr/lib(dict, terminfo, zoneinfo)中。
11:显然,/中没有手册页,因为它们在启动时不需要,在紧急情况下也不需要。真的。
12:例如,如果/usr/share/man在第4节(设备)中没有手册页面,那么/usr/share/man/man4可能会被省略。
13:这个规则的一个主要例外是英国,在ISO 3166中是“GB”,但大多数电子邮件地址都是“UK”。
14:/usr/local/man已被弃用,可能会在本规范的未来版本中被删除。
15:一些这样的文件包括: airport, birthtoken, eqnchar, getopt, gprof.callg, gprof.flat, inter.phone, ipfw.samp.filters, ipfw.samp.scripts, keycap.pcvt, mail.help, mail.tildehelp, man.template, map3270, mdoc.template, more.help, na.phone, nslookup.help, operator, scsi_modes, sendmail.hf, style, units.lib, vgrindefs, vgrindefs.db, zipcodes。
16:以前,这个magic文件放在/usr/share/misc中,但是现在的文件命令使用了几个文件,并将它们放在/usr/share/file中。为了兼容性,发行版可以在/usr/share/misc/magic处创建一个符号链接,指向/usr/share/file/magic。
17:通常,源代码不应该在这个层次结构中构建。
第5章 /var层次结构
5.1 目的
/var包含各种数据文件。这包括spool目录和文件,管理和日志数据和临时文件。 /var的某些部分不能在不同系统间共享。如:/var/log,/var/lock,和/var/run。其它部分可以共享,特别是/var/mail,/var/cache/man,/var/cache/fonts,和/var/spool/news。
在这里指定/var是为了使/usr可以以只读方式挂载。在系统操作(对应于安装与软件维护)期间写入/usr的所有内容必须在/var中。
如果/var不能作为一个单独的分区,通常最好将/var从根分区移到/usr分区。(有时这样做是为了减少根分区的大小,或根分区运行空间不足时)。然而,/var不能链接到/usr,因为这会使/usr和/var分离更加困难,而且很可能会产生命名冲突。作为代替的,会将/var链接到/usr/var。
应用程序通常不能将目录添加到/var的顶层。只有当对整个系统有影响,并与FHS进行了邮件协商后,才能添加这些目录。
5.2 必需内容
/var目录中必须有以下目录或目录的符号链接:
目录 | 描述 |
---|---|
cache | 应用程序缓存数据 |
lib | 可变状态信息 |
local | /usr/local的可变数据 |
lock | 锁文件 |
log | 日志文件和目录 |
opt | /opt的可变数据 |
run | 进程运行相关数据 |
spool | 应用程序spool数据 |
tmp | 在系统重启之间保存的临时文件 |
有些目录是保留的,它们不能被一些新的应用程序任意使用,因为它们会与历史和/或本地实践相冲突,这些目录是:
/var/backups
/var/cron
/var/msgs
/var/preserve
5.3 特定选项
如果安装了相应的子系统,那么下列目录或目录的符号链接必须在/var中:
目录 | 描述 |
---|---|
account | 进程统计日志(可选) |
crash | 系统崩溃转储(可选) |
games | 可变游戏数据(可选) |
用户邮箱文件(可选) | |
yp | 网络信息服务(NIS)数据库文件(可选) |
5.4 /var/account:进程统计日志(可选)
5.4.1 目的
这个目录保存当前活动进程统计日志和复合进程使用数据(在一些类UNIX系统中,lastcomm和sa使用了这些数据)。
5.5 /var/cache:应用程序缓存数据
5.5.1 目的
/var/cache用于缓存应用程序的数据。这些数据是由于耗时的I/O或计算而在本地生成的。应用程序必须能够重新生成或恢复数据。不同于/var/spool,缓存的文件可以被删除而不会丢失数据。在调用应用程序和重启系统间,数据必须保持有效。
位于/var/cache下的文件可能以应用程序特定的方式或由系统管理员过期,或两者都有。应用程序必须始终能够从手动删除这些文件中恢复(通常是因为磁盘空间不足)。对缓存目录的数据格式没有其它要求。
Rationale
一个单独的用于缓存数据的目录可以允许管理员设置与/var中其它目录不同的磁盘和备份策略。
5.5.2 特定选项
目录 | 描述 |
---|---|
fonts | 本地生成字体(可选) |
man | 本地格式化手册页(可选) |
www | WWW代理或缓存数据(可选) |
<package> | 包特定的缓存数据(可选) |
5.5.3 /var/cache/fonts:本地生成字体(可选)
5.5.3.1 目的
目录/var/cache/fonts应该用于存储任何动态生成的字体。特别是,由mktexpk自动生成的所有字体必须放置在/var/cache/fonts下具有合适命名的子目录中。1
5.5.3.2 特定选项
其它动态生成的字体也可以放在这棵树下,放在/var/cache/fonts下具有合适命名的子目录中。
5.5.4 /var/cache/man:本地格式化手册页(可选)
5.5.4.1 目的
该目录为提供只读/usr分区但希望缓存本地格式手册页的站点提供了一个标准位置。以可写方式挂载/usr的站点(例如,单用户模式安装)可以选择不使用/var/cache/man,而将格式化手册页年增写入/usr/share/man的cat<section>目录中。我们建议大多数站点选择下面选项之一来处理:
-
将所有手册页与未格式化的版本一起预格式化。
-
不允许缓存格式化的手册页,并要求在每次打开手册页时进行格式化。
-
允许本地在/var/cache/man中缓存格式化的手册页。
/var/cache/man结构需要反映多个手册页层次结构的事实和多语言支持的可能性。
给定一个未格式化的手册页,通常出现在<path>/man/<locale>/man<section>中,对应的放置格式化的手册页目录是/var/cache/man/<catpath>/<locale>/cat<section>中,其中<catpath>是从<path>中通过移除前面的usr和后面的share路径名组件派生出来的。(注意,可能会缺少<locale>组件)2
写入/var/cache/man中的手册页最终可能被转移到源man层次结构适当的预格式化目录中或者过期;同样的,在源man层次结构中的已格式化的手册页,如果一段时间没有人访问,也会过期。
如果在只读媒体(如CD-ROM)上的系统附带了预格式化的手册页,则必须将它们安装在源man层次结构中(如/usr/share/man/cat<section>)。/var/cache/man保留做格式化的手册页的可写缓存。
Rationale
这个标准的1.2版为这个层次结构指定了/var/catman。该路径已经移动到了/var/cache下,这样可以更好地反映格式化手册页的动态特性。目录名也已改为man,以便增强层次结构,使其可以包括除cat之外的其它后处理格式,如PostScript,HTML或DVI。
5.6 /var/crash:系统崩溃转储(可选)
5.6.1 目的
此目录保存系统崩溃转储。截止本标准发布之日,Linux不支持系统崩溃转储,但其它符合FHS的系统可能支持。
5.7 /var/games:可变游戏数据(可选)
5.7.1 目的
所有与/usr中的游戏相关的可变数据都应该放在这里。/var/games应该保存先前在/usr中找到的可变数据;静态数据,如帮助文件,级别描述等,必须放在别的地方,比如/usr/share/games。
Rationale
/var/games被赋予了它自己的层次结构,而不是像该标准的1.2版本那样将它放在/var/lib下。这种分离允许本地控制备份策略,权限,和磁盘使用,还允许主机间共享并且减少了/var/lib中的混乱。此外,/var/games还是BSD通常使用的路径。
5.8 /var/lib:可变状态信息
5.8.1 目的
这个层次结构保存与应用程序或系统有关的状态信息。状态信息是系统运行时修改的数据,这些数据属于某个特定的主机。用户永远不需要修改/var/lib中的文件来配置包的操作,并且用于存储数据的文件层次结构 不能暴露给普通用户。3
状态信息通常用于在调用之间和在同一应用程序的不同实例之间保存应用程序(或一组相关联的应用程序)状态。状态信息通常应该在重启后保持有效,不应该记录日志输出,并且也不应该是假脱机数据。
应用程序(或一组相关联的应用程序)必须使用/var/lib的子目录来存放其数据。有一个必需的子目录,/var/lib/misc,用来存放不需要子目录的状态文件;只有在发行版中包含有问题的应用程序时,才会出现其它子目录。4
/var/lib/<name>是所有发行版打包支持都必须使用的位置。当然,不同的发行版可能使用不同的名称。
5.8.2 必需内容
/var/lib中必须包含以下目录或目录的符号链接:
目录 | 描述 |
---|---|
misc | 杂项状态数据 |
5.8.3 特定选项
如果安装了相应的子系统,那么下列目录或目录的符号链接,必须在/var/lib中:
目录 | 描述 |
---|---|
<editor> | 编辑器备份文件和状态(可选) |
<pkgtool> | 打包支持文件(可选) |
<package> | 包和子系统的状态数据(可选) |
color | 颜色管理信息(可选) |
hwclock | hwclock的状态目录(可选) |
xdm | X显示管理器可变数据 |
5.8.4 /var/lib/<editor>:编辑器备份文件和状态(可选)
5.8.4.1 目的
这些目录包含任何编辑器意外终止所生成的保存文件(如,elvis,jove,nvi)。
其他编辑器可能不需要存放崩溃恢复文件的目录,但可能需要一个定义良好的位置来存储编辑器运行时的其它信息。该信息应该保存在/var/lib下的子目录中(比如,GNU Emacs会将锁文件放在/var/lib/emacs/lock中)。
未来的编辑器可能需要除崩溃恢复文件和锁文件外的其它状态信息—-这些信息也应该放在/var/lib/<editor>下。
Rationale
以前的Linux发行版,以及所有商业供应商,都对vi或其克隆版本使用/var/preserve。但是,每个编辑器都使用它们自己的格式来存储这些崩溃恢复文件,所以,每个编辑器都需要一个单独的目录。
特定编辑器的锁文件通常与设备或资源锁文件非常不同,因此,它们存储在/var/lib下。
5.8.5 /var/lib/color:颜色管理信息(可选)
5.8.5.1 目的
这个目录是动态安装ICC颜色管理文件的主目录。该目录应该使用与/usr/share/color相同的规则。
5.8.6 /var/lib/hwclock:hwclock的状态目录(可选)
5.8.6.1 目的
该目录包含文件/var/lib/hwclock/adjtime。
Rationale
在FHS2.1中,该文件是/etc/adjtime,但是根据hwclock来更新它,这显然是不正确的。
5.8.7 /var/lib/misc:各种可变数据
5.8.7.1 目的
此目录包含了不放在/var/lib的子目录中的可变数据。必须尝试在该目录中使用相对惟一的名称以避免命名冲突。5
5.9 /var/lock:锁文件
5.9.1 目的
锁文件应该存储在/var/lock目录结构中。
被多个应用程序共享的设备和其它资源的锁文件,例如原来保存在/usr/spool/locks或/usr/spool/uucp中的串行设备锁文件,现在必须存储在/var/lock中。必须使用的命名约定是“LCK…”后跟设备基本名称。例如,要锁定/dev/ttyS0必须创建“LCK…ttyS0”文件。6
这种锁文件内容必须使用的格式是HDB UUCP锁文件格式。HDB格式将进程标识符(PID)存储为一个十字节的ASCII码十进制数,末尾带一个换行符。比如,如果1230进程持有一个锁文件,那它会包含11个字符,空格,空格,空格,空格,空格,空格,1,2,3,0,和换行符。
5.10 /var/log:日志文件和目录
5.10.1 目的
这个目录包含各种日志文件。大多数日志必须写入此目录或相应的子目录。
5.10.2 特定选项
如果安装了相应的子系统,那么下列文件或文件的符号链接必须在/var/lob中:
文件 | 描述 |
lastlog | 每个用户最后一次登陆的记录 |
messages | 来自syslogd的系统消息 |
wtmp | 所有登陆登出的记录 |
5.11 /var/mail:用户邮箱文件(可选)
5.11.1 目的
脱机邮件必须可以通过/var/mail来访问,并且邮件脱机文件必须使用<username>的形式。7
这个位置的用户邮箱文件必须以标准UNIX邮箱格式来保存。
Rationale
这个目录的逻辑位置是从/var/spool/mail中变化过来的,为了将FHS放到几乎所有UNIX发行版中并保持一致。这个更改对于互操作性来说很重要,因为一个/var/mail经常会在多个主机和多个UNIX发行版之间共享(尽管存在NFS锁的问题)。
需要注意的是,不需要将脱机邮件实际移动到这个位置。但是,程序和头文件必须更改为使用/var/mail。
5.12 /var/opt:/opt的可变数据
5.12.1 目的
/opt目录下的软件包的可变数据必须安装在/var/opt/<subdir>下,其中<subdir>是/opt目录下用于存储附加软件包静态数据子树名称,除非被/etc目录下的另一个文件所替代。/var/opt/<subdir>的内部安排没有强加任何结构。
Rationale
请参阅/opt的Rationale
5.13 /var/run:运行时可变数据
5.13.1 目的
该目录曾经用于描述自系统启动以来的系统信息数据。这些功能现在已经被移动到了/run下;此目录的存在是为了确保与使用旧版本规范的系统和软件保持兼容性。
5.13.2 必需内容
通常,/run的要求也同样适用于/var/run。将/var/run实现为/run的符号链接也是有效的。
保存当前谁在使用系统的信息文件utmp文件,位于这个位置。
除了访问/var/run/utmp文件外,系统不能直接访问/var/run和/run。8
5.14 /var/spool:应用程序脱机数据
5.14.1 目的
/var/spool包含了正在等待稍后处理的数据。/var/spool中的数据表示将来要做的工作(由程序,用户或管理员);通常数据在处理后被删除。9
5.14.2 特定选项
如果安装了相应的子系统,那么下列目录或目录的符号链接必须在/var/spool中:
目录 | 描述 |
---|---|
lpd | 打印机脱机目录(可选) |
mqueue | 外发邮件队列(可选) |
news | 新闻脱机目录(可选) |
rwho | Rwhod文件(可选) |
uucp | UUCP的脱机目录(可选) |
5.14.3 /var/spool/lpd:行打印机守护进程打印队列(可选)
5.14.3.1 目的
lpd的锁文件lpd.lock,必须放在/var/spool/lpd中。建议将每个打印机的锁文件放在特定打印机的spool目录中并且命名为lock。
5.14.3.2 特定选项
目录 | 描述 |
---|---|
printer | 特定打印机的脱机文件(选项) |
5.14.4 /var/spool/rwho:Rwho文件(可选)
5.14.4.1 目的
这个目录保存了本地网络的其它系统的rwhod信息。
Rationale
一些BSD版本使用/var/rwho来处理这些数据;考虑到它在其它系统的/var/spool中的历史位置,并且它近似于“spooled”数据的定义,这个位置被认为是合适的。
5.15 /var/tmp:在系统重启间保存的临时文件
5.15.1 目的
对于需要在系统重启之间保存临时文件或目录的程序,可以使用/var/tmp目录。因此,保存在/var/tmp下的数据比在/tmp下的数据更持久。
当系统启动时,位于/var/tmp下的文件和目录不能被删除。虽然存储在/var/tmp中的数据通常会以特定于站点的方式被删除,但建议删除的频率低于/tmp。
5.16 /var/yp:网络信息服务(NIS)数据库文件(可选)
5.16.1 目的
网络信息服务(NIS)的可变数据,以前被称为太阳黄页(YP),必须放在这个目录。
Rationale
/var/yp是NIS(yp)数据的标准目录,几乎只在NIS文档和系统中使用。10
注:
1:这个标准目前还没有包含TeX目录结构(描述布局TeX文件和目录的文档),但它可能是有助于阅读。网址是ftp://ctan.tug.org/tex。
2:例如,/usr/share/man/man1/ls.1被格式化为/var/cache/man/cat1/ls.1、并且/usr/x11r6/man/<locale>/ man3/XtClass.3x被格式化为/var/cache/man/X11R6/<local>/cat3/XtClass.3x 。
3:带有公开文件系统结构的数据应该存储在/srv中。
4:该标准的这个版本与以前版本之前的一个重要区别是,现在的应用程序可以使用/var/lib的子目录。
5:这个层次结构应该包含当前BSD版本中存储在/var/db中的文件。这些包括locate.database和mountdtab,以及内核符号数据库。
6:然后,任何希望使用/dev/ttyS0的东西都可以读取锁文件并相应地采取行动(/var/lock中的所有锁都应该是世界可读的)。
7:注意,/var/mail可能是另一个目录的符号链接。
8:这是为了防止临时文件的位置出现混乱。通常,程序应该使用/var/run或/run来访问这些文件,而不是同时使用两者。
9:UUCP锁文件必须放在/var/lock.请参阅上面关于/var/lock的部分。
10:不应将NIS与Sun NIS+混淆,后者使用不同的目录/var/nis。
第6章 特定操作系统附录
本章针对的是仅适用于特定操作系统的额外需求和建议。本章中的内容不应与基本标准相冲突。
6.1 Linux
这是Linux操作系统的附录。
6.1.1 /:根目录
在Linux系统中,如果内核位于/中,我们建议使用名称vmlinux或vmlinuz,它们已经在最近的Linux内核源代码包中使用过。
6.1.2 /bin:基本用户命令二进制文件(供所有用户使用)
Linux系统需要将这些附加文件放到/bin中:
- setserial
6.1.3 /dev:设备和特殊文件
/dev下必须存在以下设备。
/dev/null 所有写入该设备的数据都会被丢弃。从这个设备的一个读操作会返回一个EOF状态。
/dev/zero 这个设备是归零数据的来源。所有写入该设备的数据将被丢弃。从该设备进行的读操作会返回同请求一样多字节数的0值。
/dev/tty 这个设备是进程的控制终端的同义词。一旦这个设备被打开,所有的读写操作就像实际的控制终端设备已经被打开一样。
Rationale
FHS以前的版本对/dev有着更严格的要求。其它设备也可能存在于/dev中。设备名称可能以符号链接的形式存在,它们指向/dev或/dev子目录中的其它设备节点。对主/副数值没有要求。
6.1.4 /etc:特定主机系统配置
Linux系统需要将这些附加文件放到/etc。
- lilo.conf
6.1.5 /proc:内核和进程信息虚拟文件系统
proc文件系统实际上是处理进程和系统信息的标准Linux方式,而不是/dev/kmem和其它类似方法。我们强烈建议使用这种方法来存储和检索进程信息以及其它内核和内存信息。
6.1.6 /sbin:基本系统二进制文件
Linux系统将与文件系统维护和引导加载程序管理相关的命令放入了/sbin中。
/sbin的可选文件:
- 静态二进制文件:
- ldconfig
- sln
- ssync
当出现问题时,静态ln(sln)和静态sync(ssync)非常有用。由于ldconfig程序的存在,并且可以在升级动态库时充当指导手,所在sln的主要用途(在一次糟糕的升级后修复/lib中的错误符号链接)不再是主要的问题。静态sync在一些紧急情况下非常有用。请注意,这些不一定是标准ln和sync的静态链接版本,但也可能是。
/sbin中ldconfig二进制文件是可选的,因为站点可以选择在引导时运行ldconfig,而不只是在升级共享库时运行。(不清楚在每次启动时运行ldconfig是否有利)尽管如此,有些人还是喜欢使用ldconfig来处理(非常常见)的情况:
- 我刚刚删除了/lib/
- 我找不到库的名称因为ls是动态链接的,我使用了一个没有内置ls的shell,我也不知道使用echo *命令来替代。
- 我有一个静态sln,但我不知道该怎么调用这个链接。
- 杂项:
- ctrlaltdel
- kbdrate
为了应对一些键盘因为重复频率太高而无法使用的事实,某些系统在/sbin中安装了kbdrate。
由于Ctrl-Alt-Del组合键在内核中的默认操作是立即硬重启,所以通常建议在以读写模式挂载根文件系统前禁用该行为。一些init程序组能够禁用Ctrl-Alt-Del,但其它可能需要ctrlaltdel程序,它被安装在这些系统的/sbin中。
6.1.7 /sys:内核和系统信息虚拟文件系统
sys文件系统是设备,驱动,和一些内核特性信息的存放位置。它的底层结构由当前正在使用的特定Linux内核决定或不指定。
6.1.8 /usr/include:C程序要包含的头文件
安装了C或C++编译器,并且只针对不基于glibc的系统,则需要这些符号链接:
/usr/include/asm → /usr/src/linux/include/asm-<arch>
/usr/include/linux → /usr/src/linux/include/linux
6.1.9 /usr/src:源代码
对于基于glic的系统,没有针对该目录的特定指南。对于基于glibc之前的Linux libc修订版的系统,适用以下指导原则和基本原理:
应该放在特定位置的唯一源代码是Linux内核源代码。它位于/usr/src/linux中。
安装了C或C++编译器,但没有安装完整的Linux内核源代码,那么内核源代码的包含文件必须位于这些目录中:
/usr/src/linux/include/asm-<arch>
/usr/src/linux/include/linux
<arch>是系统架构的名称。
注意
/usr/src/linux可能是指向内核源代码树的符号链接。
Rationale
重要的是内核包含文件应该放在/usr/src/linux中而不是/usr/include中,这样当系统管理员第一次升级内核版本时就不会出现问题。
6.1.10 /var/spool/cron:定时任务
该目录包含了cron和at程序的可变数据。
第7章 附录
7.1 FHS邮件列表
FHS邮件列表位于fhs-discuss@lists.linuxfoundation.org(作为垃圾邮件限制措施需要订阅)。邮件列表订阅信息、档案等可在https://lists.linux-foundation.org/mailman/listinfo/fhs-discuss找到。
7.2 FHS的背景
开发标准文件系统层次结构的过程始于1993年8月,当时正在努力重构Linux的文件和目录结构。FSSTND是Linux操作系统特有的文件系统层次结构标准,于1994年2月14日发布。随后的修订分别于1994年10月9日和1995年3月28日公布。
在1995年初,在BSD开发社区成员的帮助下,开发一个不仅针对Linux,而且针对其他类unix系统的更全面的FSSTND版本的目标被采纳。因此,大家一致致力于解决类unix系统普遍存在的问题。由于这种范围的扩大,该标准的名称被更改为文件系统层次结构标准(Filesystem Hierarchy standard),简称FHS。
本文档末尾列出了为本标准做出广泛贡献的志愿者。这个标准代表了这些贡献者和其他贡献者的共识观点。 感谢加州大学圣地亚哥分校的网络运营,以及后来的SourceForge,他们允许我们在开发的早期阶段使用他们优秀的邮件列表服务器。
7.3 一般准则
以下是在开发该标准时使用的一些指导原则:
- 在限制过渡困难的同时解决技术问题。
- 使规范相当稳定。
- 获得相关开发团队中的分销商、开发者和其他决策者的认可,并鼓励他们的参与。
- 提供一个对不同类unix系统的实现者有吸引力的标准。
7.4 范围
本文档通过指定文件和目录的位置以及一些系统文件的内容,为FHS文件系统指定了一个标准的文件系统层次结构。
这个标准被设计用来供系统集成商、包开发人员和系统管理员在构建和维护符合FHS的文件系统时使用。它的主要目的是作为一个参考,而不是关于如何管理一致的文件系统层次结构的教程。
FHS起源于FSSTND的早期工作,FSSTND是Linux操作系统的文件系统组织标准。它构建在FSSTND之上,不仅解决了Linux社区的互操作性问题,而且包含一个更广泛的领域,包括基于4.4 bsd的操作系统。它整合了在BSD世界和其他地方学到的关于多架构支持和异构网络需求的经验教训。
尽管该标准比以前的文件系统层次结构标准化尝试更加全面,但随着需求与新兴技术的关系发生变化,可能需要定期更新。也有可能会发现这里讨论的问题的更好的解决方案,从而使我们的解决方案不再是可能的最佳解决方案。除了定期更新本文档外,还可能发布补充草案。但是,一个特定的目标是从这个文档的一个版本到下一个版本的向后兼容性。
欢迎对本标准的评论。任何关于更改的评论或建议可以直接发送到FHS邮件列表,或作为bug存档,或两者兼有。排版或语法注释应该作为bug进行归档。漏洞追踪器在http://bugs.linuxfoundation.org -使用目录FHS。
在将邮件发送到邮件列表之前,请先浏览一下邮件列表存档,以避免对旧主题的过度重新讨论。
偶尔可能会出现关于如何解释本文档中的项目的问题。如果您需要澄清,请联系FHS邮件列表。由于这一标准代表了许多参与者的共识,确保任何解释也代表了他们的集体意见是很重要的。由于这个原因,可能不可能立即作出答复,除非调查是以前的调查的主题。
7.5 鸣谢
FHS的开发人员要感谢开发人员、系统管理员和用户,他们的意见对这个标准至关重要。我们要感谢每一位帮助编写、编译和撰写此标准的贡献者。
FHS工作组也要感谢那些支持FSSTND的Linux开发人员,FSSTND是该标准的前身。如果他们没有证明FSSTND是有益的,FHS就不可能进化。
7.6 贡献者
Brandon S. Allbery | John A. Martin | Mike Sangrey |
Keith Bostic | Ian McCloghrie | David H. Silber |
Drew Eckhardt | Chris Metcalf | Thomas Sippel-Dau |
Rik Faith | Ian Murdock | Theodore Ts’o |
Karl Goetz | David C. Niemi | Stephen Tweedie |
Stephen Harris | Lennart Poettering | Fred N. van Kempen |
Ian Jackson | Daniel Quinlan | Bernd Warken |
Andreas Jaeger | Eric S. Raymond | Mats Wichmann |
Jeff Licquia | Rusty Russell | Christopher Yeoh |
参考:
翻译工具:
原标准下载链接:https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf
- 版权声明: