本文主要是介绍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章 根文件系统
3.2 要求
3.3 具体选择
3.4 /bin:基本用户命令二进制文件(供所有用户使用)
3.4.1 目的
3.4.2 要求
3.4.3 具体选择
3.5. /boot:boot loader 的静态文件
3.5.1. 目的
3.5.2 具体选择
3.6 dev:设备文件
3.6.1 目的
3.7 /etc:主机专用的系统配置
3.7.1 目的
3.7.2 要求
3.7.3 具体选择
3.7.4 /etc/opt:/opt的配置文件
3.7.5. /etc/X11 : X Window系统的配置(可选)
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.2 要求
3.11. /media :可移动媒体的挂载点
3.11.1 目的
3.11.2. 具体选择
3.12. /mnt :临时挂载文件系统的挂载点
3.12.1 目的
3.13. /opt : 附加应用程序软件包
3.13.1 /opt用于安装附加应用程序软件包而保留的
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 : Data for services provided by this system
3.17.1. Purpose
Rationale
3.18 /tmp:临时文件
第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.6 /usr/lib:用于编程和封装的库
4.6.1 目的
4.6.2 具体选择
4.7 /usr/libexec:其他程序运行的二进制文件(可选)
4.8. /usr/lib : Alternate format libraries (optional)
4.8.1 目的
4.9. /usr/local : 本地层次结构
4.9.1 目的
4.9.2 要求
4.9.3 具体选择
4.10. /usr/sbin : 非必要的标准系统二进制文件
4.10.1 目的
4.10.2 要求
4.11.1 目的
4.11.2 要求
4.11.3 具体选择
4.12. /usr/src : 源代码(可选)
4.12.1. 目的
第5章 /var 层次结构
5.2 要求
5.3 具体选择
5.4 /var/account:进程统计日志(可选)
5.4.1 目的
5.5 /var/cache:应用程序缓存数据
5.5.1 目的
5.6 /var/crash:系统崩溃转储(可选)
5.6.1 目的
5.7 /var/games:可变游戏数据(可选)
5.7.1 目的
5.8 /var/lib:变量状态信息
5.8.2 要求
5.8.3 具体选择
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.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 : Application spool data
5.15 /var/tmp:系统重新启动之间保留的临时文件
5.15.1 目的
5.16 /var/yp:网络信息服务(NIS)数据库文件(可选)
5.16.1 目的
第6章 操作系统特定附件
6.1 Linux的
6.1.1. /: Root directory
6.1.2 /bin:基本用户命令二进制文件(供所有用户使用)
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 : 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
相同的子结构。
必须在/var/opt
安装可变的包文件(在正常操作中更改)。 有关更多信息,请参阅/var/opt
一节。
主机的专用配置文件必须安装在/etc/opt
。 有关更多信息,请参阅/etc
部分。
除了那些必须驻留在文件系统树中的特定位置以便正常运行的软件包文件之外, /opt
, /var/opt
和/etc/opt
层次结构之外不能存在其他软件包文件。 例如,设备锁文件必须放在/var/lock
,设备必须位于/dev
。
发行版可以在适当注册的子目录下安装和管理/opt
软件。
基本原理
在UNIX社区中使用/opt
附加软件是一种成熟的做法。 System V应用程序二进制接口[AT&T 1990]基于System V接口定义(第三版),提供了与此处定义的/opt
结构非常相似的/opt
结构。
英特尔二进制兼容性标准v.2(iBCS2)也为/opt
提供了类似的结构。
通常,支持系统上的程序包所需的所有数据必须存在于/opt/<package>
,包括要复制到/etc/opt/<package>
和/var/opt/<package>
中的文件以及/opt
保留目录。
使用/opt
对分发的次要限制是必要的,因为在分发安装和本地安装的软件之间可能存在冲突,特别是在某些二进制软件中找到固定路径名的情况下。
/opt/<provider>
下面的目录结构由软件的打包程序决定,但建议将软件包安装在/opt/<provider>/<package>
并遵循与/opt/<package>
指南类似的结构。
3.14. /root :root用户的主目录(可选)
3.14.1. 目的
root帐户的主目录可以由开发人员或本地首选项确定,但这是推荐的默认位置。[16]
[16]如果root帐户的主目录未存储在根分区上,则有必要确定默认为/ ,如果它无法找到的话。
我们建议不要将root帐户用于可以作为非特权用户执行的任务,并且它仅用于系统管理。因此,我们建议将邮件和其他应用程序的子目录不显示在root帐户的主目录中,并将管理角色(如root,postmaster和webmaster)的邮件转发给相应的用户。
3.15. /run :运行时可变的数据
3.15.1 目的
此目录包含描述自启动以来的系统信息数据。必须在启动过程的开始时清除(适当的删除或截断)此目录下的文件。
此目录的位置曾位于/var/run,
通常,为了向后兼容的目的,程序可以继续使用/var/run
来满足为/run
设置的要求。 迁移到使用/run
应停止使用/var/run
,除非在/var/run
一节中有注明。
程序可能有/run
的子目录;对于使用多个运行时文件的程序,我们鼓励这样做。用户还可以拥有/run
的子目录,但必须注意适当地限制访问权限以防止未经授权就使用/run
本身和其他子目录。[17]
[17]/run
对于没有特权的用户,不应该是可写的;如果任何用户可以在此目录中写入,那么这是一个主要的安全问题。用户特定的子目录应该只能由每个目录的所有者写入。
3.15.2 要求
最初放在/etc 的
进程标识符(PID)文件必须放在/run,
PID文件的命名惯例是<program-name>.pid,
例如, crond 的PID文件名为/run/crond.pid
。
PID文件的内部格式保持不变。该文件必须包含ASCII编码的十进制进程标识符,后跟换行符。例如,如果crond是进程号25,/run/crond.pid
将包含三个字符:two,five和换行符。
读取PID文件的程序在接受它们时应该有些灵活;即,在PID 文件中,它们应该忽略额外的whitespace, leading zeroes, absence of the trailing newline, 或 additional lines.
必须将保持在瞬时态( maintain transient )UNIX域套接字 放在此目录或相应的子目录中,如上所述。
3.16. /sbin : 系统二进制文件
3.16.1 目的
用于系统管理的实用程序(以及其他仅root用户的命令)存储在/sbin
, /usr/sbin
和/usr/local/sbin。/sbin
包含/bin之外的对引导,重建,恢复 和 修复系统至关重要的二进制文件。[19]
[19]决定什么东西进入 “sbin”目录很简单:如果普通(非系统管理员)用户将直接运行它,那么它必须放在 “bin”目录中。普通用户不必在他们的路径中放置任何sbin目录。
例如,用户偶尔使用的chfn等文件仍必须放入/usr/bin。ping,
虽然对root来说(网络恢复和诊断)是绝对必要的,但用户经常使用,由于这个原因,它并且必须存在于在/ bin中。
我们建议用户对/ sbin中的所有内容具有读取和执行权限,或许除了某些setuid和setgid程序。/bin
和/sbin
之间的划分不是出于安全原因或阻止用户查看操作系统而创建的。而是在每个人使用的二进制文件和主要用于管理任务的二进制文件之间提供良好的区分。在/sbin
限制用户使用方面没有固有的安全优势。
3.16.2 要求
/sbin
必须没有子目录。
/sbin
中需要以下命令或命令的符号链接:
Command | Description |
---|---|
shutdown | 用于关闭系统的命令 |
3.16.3 具体选择
如果安装了相应的子系统,则以下文件或文件的符号链接必须位于/sbin
:
Command | Description |
---|---|
fastboot | 重新启动系统而不检查磁盘(可选) |
fasthalt | 在不检查磁盘的情况下停止系统(可选) |
fdisk | 分区表操纵器(可选) |
fsck | 文件系统检查和修复实用程序(可选) |
fsck.* | 特定文件系统的文件系统检查和修复实用程序(可选) |
getty | getty程序(可选) |
halt | 停止系统的命令(可选) |
ifconfig | 配置网络接口(可选) |
init | 初始进程(可选) |
mkfs | 构建文件系统的命令(可选) |
mkfs.* | 用于构建特定文件系统的命令(可选) |
mkswap | 用于设置交换区域的命令(可选) |
reboot | 重启系统的命令(可选) |
route | IP路由表实用程序(可选) |
swapon | 启用分页和交换(可选) |
swapoff | 禁用分页和交换(可选) |
update | 守护进程定期刷新文件系统缓冲区(可选) |
3.17. /srv : Data for services provided by this system
3.17.1. Purpose
/srv
contains site-specific data which is served by this system.
Rationale
This main purpose of specifying this is so that users may find the location of the data files for a particular service, and so that services which require a single tree for readonly data, writable data and scripts (such as cgi scripts) can be reasonably placed. Data that is only of interest to a specific user should go in that users' home directory. If the directory and file structure of the data is not exposed to consumers, it should go in /var/lib
.
The methodology used to name subdirectories of /srv
is unspecified as there is currently no consensus on how this should be done. One method for structuring data under /srv
is by protocol, eg. ftp
, rsync
, www
, and cvs
. On large systems it can be useful to structure /srv
by administrative context, such as /srv/physics/www
, /srv/compsci/cvs
, etc. This setup will differ from host to host. Therefore, no program should rely on a specific subdirectory structure of /srv
existing or data necessarily being stored in /srv
. However /srv
should always exist on FHS compliant systems and should be used as the default location for such data.
Distributions must take care not to remove locally placed files in these directories without administrator permission.[20]
[20]This is particularly important as these areas will often contain both files initially installed by the distributor, and those added by the administrator
3.18 /tmp:临时文件
/tmp
目录必须为应用程序提供所需要的临时文件
程序不得假定/tmp
在程序的调用之间保留任何文件或目录
基本原理
IEEE标准POSIX.1-2008列出了与上一节类似的要求。
虽然/tmp
可以以使用 site-specific 方式删除存储的数据,但建议在系统引导时删除位于/tmp 中
的文件和目录。
FHS在历史先例和惯例的基础上增加了这一建议,但由于系统管理不在本标准范围内,因此没有提出要求。
第4章 /usr层次结构
4.1 目的
/usr
是文件系统的第二个主要部分。/usr
是可共享的只读数据。这意味着/usr
应该可以在各种符合FHS的主机之间共享,并且不得写入。任何特定于主机或随时间变化的信息都存储在其他位置。
大型软件包不得使用/usr
层次结构下的直接子目录。
4.2. 要求
usr中需要以下目录或目录的符号链接
Directory | Description |
---|---|
bin | 大多数用户命令 |
lib | 库 |
local | 本地层次结构 (empty after main installation) |
sbin | 非至关重要的系统二进制文件 |
share | 与架构无关的数据 |
4.3 具体选择
Directory | Description |
---|---|
games | 游戏和教育性的二进制文件(可选) |
include | C程序包含的头文件 |
libexec | 其他程序运行的二进制文件(可选) |
lib | Alternate Format Libraries (optional) |
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
如果安装了相应的子系统,则必须包含以下文件或文件的符号链接:
Command | Description |
---|---|
perl | 实用报表提取语言 (可选) |
python | Python解释型语言(可选) |
tclsh | 包含Tcl解释器的简单shell(可选) |
wish | 简单的Tcl / Tk窗口外壳(可选) |
expect | 交互式对话程序(可选) |
基本原理
在许多可执行脚本中,在脚本的第一行使用 #!
指定要调用的脚本解释器。要使这些脚本在不同的系统之间可移植,标准化解释器的位置是有益的。这个规范已经将shell解释器固定在/bin中,但是Perl,Python,Tcl和expect的解释器也许安装在不同的地方,这里指定的位置可以实现为解释器物理位置的符号链接。path_to_interpreter
4.5 /usr/include:标准头文件的目录
这里应该放置系统的所有通用C语言头文件。
如果安装了相应的子系统,则以下目录或指向目录的符号链接必须位于/usr/include 中:
Directory | Description |
---|---|
bsd | BSD兼容性头文件(可选) |
4.6 /usr/lib:用于编程和封装的库
4.6.1 目的
/usr/lib
包括目标文件和库。[21] 在某些系统上,它还可能包含不打算由用户或shell脚本直接执行的内部二进制文件。[22]
应用程序可以使用/usr/lib
下面的单个子目录,如果应用程序使用子目录,则应用程序所有依赖于体系结构的专用数据都必须放在该子目录中。
[21]其他与体系结构无关的特定于应用程序的静态文件和子目录必须放在 /usr/share中.
[22]见下文,在 /usr/libexec 部分,有关可执行二进制文件的/usr/lib与/usr/libexec的讨论。
4.6.2 具体选择
由于历史原因,/usr/lib/sendmail 必须是符号链接,它解析为系统邮件传输代理提供的 sendmail -compatible 命令[24][25]
[24]一些可执行命令 例如 makewhatis 和 sendmail 也被习惯性地放置在/usr/lib 里面。makewhatis 是一个内部二进制文件,必须放置在二进制目录中;用户只能访问 catman。现在较新的 sendmail 二进制文件默认放置在/usr/sbin。
此外,使用与 sendmail 兼容的邮件传输代理的系统必须提供 /usr/sbin/sendmail作为 sendmail命令,可以是可执行文件本身,也可以是相应可执行文件的符号链接。
[25] 不得存储X Window系统的主机特定数据在/usr/lib/X11内,
特定于主机的配置文件,例如xorg.conf
必须存储在其中/etc/X11中,
这包括配置数据,例如,system.twmrc,
即使它只是一个指向更为全局的配置文件(可能在/usr/lib/X11
)的符号链接。
4.7 /usr/libexec:其他程序运行的二进制文件(可选)
/usr/libexec
包括不打算由用户或shell脚本直接执行的内部二进制文件。应用程序可以使用/usr/libexec
下面的单个子目录。
以这种方式使用 /usr/libexec 的应用程序也不能使用 /usr/lib 来存储内部二进制文件,尽管他们可能会将/usr/lib用于本文所述的其他目的。
基本原理
尽管这是许多环境中的标准做法,但本文档的某些先前版本不支持/usr/libexec[26]
为了适应这种限制,通常的做法是使用/usr/lib
代替,这两种做法现在都可以接受,但每个应用程序必须选择一种方式来组织自己。
[26]
例如,参见自由软件基金会的“GNU编码标准”。(原文:See, for example, the "GNU Coding Standards" from the Free Software Foundation)
4.8. /usr/lib<qual>
: Alternate format libraries (optional)
4.8.1 目的
/usr/lib
为另一种二进制格式扮演了与 <qual>
/usr/lib
同样的角色,不同之处在于符号链接 /usr/lib
and <qual>
/sendmail/usr/lib
不是必须的。<qual>
/X11
4.9. /usr/local : 本地层次结构
4.9.1 目的
系统管理员在本地安装软件时使用/usr/local层次结构。当系统软件更新时,需要确保它不会被覆盖。它可以用于在一组主机之间共享但在/usr中找不到的程序和数据。
本地安装的软件必须放在/usr/local而不是/usr中,除非它是为了替换或升级/usr中的软件而安装的。[28]
[28]放置在/或/usr中的软件可能被系统升级覆盖,(尽管我们建议发行版在这些情况下不要覆盖/etc中的数据).因此,如果没有充分的理由,本地软件不能放在/usr/local之外。
4.9.2 要求
以下目录或目录的符号链接必须位于/ usr / local中
Directory | Description |
---|---|
bin | 本地二进制文件 |
etc | 本地二进制文件的特定于主机的系统配置 |
games | 本地游戏二进制文件 |
include | 本地 C 的头文件 |
lib | 本地库 |
man | 本地在线手册 |
sbin | 本地系统二进制文件 |
share | 本地与体系结构无关的层次结构 |
src | 本地源代码 |
首次安装符合FHS标准的系统后,其他目录(下面列出的目录除外)可能位于/usr local中。
4.9.3 具体选择
如果目录 /lib 或 /usr/lib 存在,那么相同的目录也必须存在于 /usr/local 中。
/usr/local/etc可能是 /etc/local 的符号链接。
基本原理
/usr/local/etc 的一致性有利于安装程序,并且已经在其他系统中使用。由于需要备份所有 /usr/local 来重新生成系统,因此不会带来额外的维护开销,但是如果系统希望将所有配置都放在一个层次结构下,则指向 /etc/local 的符号链接是合适的。
请注意,/us/etc
仍然不允许:/usr
中的配置文件应该放置到/etc
下面
如果目录 /usr/share/color 按本文档中指定的方式存在,那么目录/usr/local/share/color也必须存在,与/usr/share/color相同的规则。
基本原理
此用法允许系统管理员在必要时手动安装颜色配置文件。
4.9.4. /usr/local/share : 本地独立于架构的层次结构
本目录内容的要求与 /usr/share
相同
4.10. /usr/sbin : 非必要的标准系统二进制文件
4.10.1 目的
此目录包含系统管理员专用的所有非必要二进制文件。系统修复、系统还原、挂载 /usr 或其他基本功能所需要的系统管理程序必须放置在/sbin中。[29]
[29]本地安装的系统管理程序应该放置到 /usr/local/sbin 中。
4.10.2 要求
在/usr/sbin中必须没有子目录
4.11. /usr/share : 与架构无关的数据
4.11.1 目的
/usr/share 层次结构是所有只读的体系结构独立的数据文件[30]
[30]这些数据中的大部分最初都存在于/usr
(man
, doc
) 或 /usr/lib
(dict
, terminfo
, zoneinfo
) 中。
此层次结构旨在可在给定OS的所有体系结构平台之间共享;因此,例如,具有i386、Alpha和PPC平台的站点可能维护一个集中挂载的/usr/share目录。但是请注意,/usr/share通常不打算由不同的操作系统或相同操作系统的不同版本共享。
任何包含或不需要修改数据的程序或包都应该将该数据存储在/usr/share(或/usr/local/share,如果安装在本地)中,建议为此目的在/usr/share中使用一个子目录。使用单个文件的应用程序可能使用/usr/share/misc.
存储在/usr/share/games中的游戏数据必须是纯静态数据。任何可修改的文件,例如分数文件、游戏日志等等,都应该放在/var/ gamame中
4.11.2 要求
以下目录或目录的符号链接 必须包含在 /usr/share中
Directory | Description |
---|---|
man | 在线手册 |
misc | 杂项与体系结构无关的数据 |
4.11.3 具体选择
如果安装了相应的子系统,则/usr/share
必须包含以下目录或目录的符号链接:
Directory | Description |
---|---|
color | 色彩管理信息(可选) |
dict | Word lists (optional) |
doc | 杂项文件(可选) |
games | /usr/games 的静态数据文件(可选) |
info | Primary directory for GNU Info system (optional) |
locale | 区域设置信息(可选) |
nls | 本地语言支持的消息目录(可选) |
ppd | Printer definitions (optional) |
sgml | SGML data (optional) |
terminfo | Directories for terminfo database (optional) |
tmac | troff macros not distributed with groff (optional) |
xml | XML data (optional) |
zoneinfo | 时区信息和配置(可选) |
建议将特定于应用程序的,与体系结构无关的目录放在此处。这些目录包括groff,perl,ghostscript,texmf和kbd(Linux)或syscons(BSD。但是,为了向后兼容,可以将它们放在/usr/lib中,由分发者决定。类似地,如果分发者希望在/usr/share/games层次结构中放置一些游戏数据,可以在/usr/share/games层次结构之外使用/usr/lib/games层次结构。
4.11.4. /usr/share/color : 色彩管理信息(可选)
4.11.4.1 目的
该目录是系统安装的ICC颜色管理文件的home。
4.11.4.2 具体选择
如果安装了相应的子系统,则/usr/share/color
必须包含以下目录:
Directory | Description |
---|---|
icc | ICC颜色配置文件(可选) |
顶级目录/usr/share/color不能包含任何文件;所有文件都应该在/usr/share/color的子目录中。
4.11.5. /usr/share/dict 单词列表(可选)
4.11.5.1 目的
该目录是系统上单词列表的home; 传统上,这个目录只包含英语 words
文件,look(1)和各种拼写程序使用该文件,words
可以使用美国和英国拼写
只有单词列表位于此处的原因是它们是所有拼写检查器共有的唯一文件。
4.11.5.2 具体选择
/usr/share/dict
如果安装了相应的子系统,则必须包含以下文件或文件的符号链接:
File | Description |
---|---|
words | 英文单词列表(可选) |
需要美国和英国拼写的网站可能链接 words
到 /usr/share/dict/american-english
或 /usr/share/dict/british-english
.
其他语言的单词列表可以使用该语言的英文名添加,例如,可以添加 /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
文件系统下的命令和数据的手册信息。[31]
[31]显然,事实上,在/中没有手册页,因为它们在引导时不需要,在紧急情况下也不需要。
大部分数据最初都存在于/usr
( man
, doc
)或/usr/lib
( dict
, terminfo
, zoneinfo
)中。
手册页存储在<mandir>/<locale>/man<section>/<arch>
。 下面给出<mandir>
, <locale>
, <section>
和<arch>
的解释 。
每个部分的描述如下:
-
man1
:用户程序,本章描述可公开访问的命令。 用户需要使用的大多数程序文档都位于此处。 -
man2
:系统调用,本节描述所有系统调用(请求内核执行操作)。 -
man3
:库函数和子例程,第3节描述了不直接调用内核服务的程序库例程。 这和第2章只是程序员真正感兴趣的。 -
man4
:特殊文件,第4节描述了系统中可用的特殊文件,相关驱动程序功能和网络支持。 通常,这包括/dev
的设备文件和网络协议支持的内核接口。 -
man5
:文件格式,许多数据文件的格式记录在第5节中。这包括各种包含文件,程序输出文件和系统文件。 -
man6
:游戏,本章介绍游戏,演示和一般的琐碎程序。 不同的人对于这是多么重要有不同的观念。 -
man7
:其他难以分类的手册页被指定为第7节。此处可以找到troff和其他文本处理宏包。 -
man8
:系统管理,系统管理员用于系统操作和维护的程序在此处记录。 其中一些程序偶尔也会对普通用户有用。
4.11.6.2 具体选择
以下目录或目录的符号链接必须位于/usr/share/<mandir>/<locale>
,除非它们为空: [32]
[32] 例如,如果/usr/share/man
在第4部分(设备)中没有手册页,则可以省略/usr/share/man/man4
。
Directory | Description |
---|---|
man1 | 用户程序(可选) |
man2 | 系统调用(可选) |
man3 | 库调用(可选) |
man4 | 特殊文件(可选) |
man5 | 文件格式(可选) |
man6 | 游戏(可选) |
man7 | 杂项(可选) |
man8 | 系统管理(可选) |
组件<section>
描述了手册章节。
必须在/usr/share/man
的结构中作出规定,以支持以不同(或多种)语言编写的手册页。 这些规定必须考虑这些手册页的存储和参考。 相关因素包括语言(包括基于地理的差异)和字符代码集。
这个/usr/share/man
的语言子目录的命名基于POSIX 1003.1标准的附录E,该标准描述了语言环境识别字符串 - 描述文化环境的最广为接受的方法。 <locale>
字符串是:
<language>[_<territory>][.<character-set>][,<version>]
<language>
字段必须取自ISO 639(用于表示语言名称的代码)。 它必须是两个字符宽,并且仅使用小写字母指定。
如果可能, <territory>
字段必须是ISO 3166的双字母代码(国家代表的规范)。 (大多数人都熟悉用于电子邮件地址中的国家/地区代码的双字母代码。)它必须是两个字符宽,并且仅使用大写字母指定。[33]
[33]这一规则的一个主要例外是英国,ISO 3166中为“GB”,大多数电子邮件地址为“UK”。
<character-set>
字段必须表示描述字符集的标准。 如果<character-set>
字段只是一个数字规范,则该数字表示描述字符集的国际标准的编号。 如果可能,建议这是一个数字表示(特别是ISO标准),不包括额外的标点符号,并且任何字母都是小写的。
指定配置文件的<version>
的参数可以放在<character-set>
字段之后,用逗号分隔。 这可以用来区分不同的文化需求; 例如,字典顺序与更面向系统的整理顺序。 除非有必要,否则本标准建议不要使用<version>
字段。
对所有手册页使用唯一语言和代码集的系统可以省略<locale>
子字符串并将所有手册页存储在<mandir>
。 例如,仅具有用ASCII编码的英文手册页的系统可以直接在/usr/share/man
存储手册页( man<section>
目录)。 (事实上,这是传统的环境和安排。)
有广泛接受的标准字符代码集的国家/地区可能省略<character-set>
字段,但强烈建议将其包括在内,特别是对于具有多个竞争标准的国家/地区。
各种例子:
Language | Territory | Character Set | Directory |
---|---|---|---|
English | — | ASCII | /usr/share/man/en |
English | United Kingdom | Unicode UTF-8 | /usr/share/man/en_GB.10646 |
English | United States | ASCII | /usr/share/man/en_US |
French | Canada | ISO 8859-1 | /usr/share/man/fr_CA.88591 |
French | France | ISO 8859-1 | /usr/share/man/fr_FR.88591 |
German | Germany | ISO 646 | /usr/share/man/de_DE.646 |
German | Germany | ISO 6937 | /usr/share/man/de_DE.6937 |
German | Germany | ISO 8859-1 | /usr/share/man/de_DE.88591 |
German | Switzerland | ISO 646 | /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 (or 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
具有相同的结构,which consume manual page content [34]
[34]/usr/local/man
已弃用,可能会在本规范的未来版本中删除。
包含格式化手册页条目的cat页面部分( cat<section>
)也可以在<mandir>/<locale>
子目录中找到,但不是必需的,也不能代替nroff源手册页分发。
传统上定义编号的部分“1”到“8”。 通常,位于特定部分内的手册页的文件名以.<section>
结尾。
此外,一些大型特定于应用程序的手册页还在手册页文件名后附加了一个后缀。 例如,MH邮件处理系统手册页必须在所有MH手册中附加mh
。 所有X Window System手册页必须在文件名后附加一个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中
File | Description |
---|---|
ascii | ASCII character set table (optional) |
termcap | Terminal capability database (optional) |
termcap.db | Terminal capability database (optional) |
其他(特定于应用程序)文件可能会出现在这里,但是分发者可以自行决定将它们放在/usr/lib
中。[35] [36]
[35]这些文件包括 : 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
.
[36]历史上, magic
文件放在/usr/share/misc
,但文件命令的现代变体使用多个文件并将它们放在/usr/share/file
。 为了兼容性,分发者可以在/usr/share/misc/magic
创建一个符号链接,指向/usr/share/file/magic
。
4.11.8. /usr/share/ppd : 打印机定义(可选)
4.11.8.1. 目的
/usr/share/ppd
包含PostScript打印机定义(PPD)文件,这些文件被许多打印系统用作打印机驱动程序的描述。 PPD文件可以放在此目录中,也可以放在子目录中。
4.11.9. /usr/share/sgml : SGML数据(可选)
4.11.9.1 目的
/usr/share/sgml
包含SGML应用程序使用的与体系结构无关的文件,例如普通目录(不是集中目录,请参阅/etc/sgml
),DTD,实体或样式表。
4.11.9.2 具体选择
如果安装了相应的子系统,则以下目录或目录的符号链接必须位于/usr/share/sgml
:
Directory | Description |
---|---|
docbook | docbook DTD (optional) |
tei | tei DTD (optional) |
html | html DTD (optional) |
mathml | mathml DTD (optional) |
4.11.10. /usr/share/xml : XML 数据(可选)
/usr/share/xml
包含XML应用程序使用的与体系结构无关的文件,例如普通目录(不是集中目录,请参阅/etc/sgml
),DTD,实体或样式表。
如果安装了相应的子系统,则以下目录或目录的符号链接必须位于/usr/share/xml
:
Directory | Description |
---|---|
docbook | docbook XML DTD (optional) |
xhtml | XHTML DTD (optional) |
mathml | MathML DTD (optional) |
4.12. /usr/src : 源代码(可选)
4.12.1. 目的
源代码可以放在此子目录中,仅供参考。[37]
[37]通常,不应在此层次结构中构建源。
第5章 /var 层次结构
/var包含可变数据文件。这包括假托机(
- Simultaneous Peripheral Operation Online
)目录和文件、管理和日志数据以及临时和临时文件。
var的某些部分不能在不同的系统之间共享。例如,/var/log、/var/lock和/var/run。其他部分可以共享,特别是/var/mail、/var/cache/man、/var/cache/字体和/var/spool/news
这里指定/var是为了能够将/usr挂载为只读。在系统运行期间写入/usr的所有内容(与安装和软件维护相反)都必须在/var中。
如果/var不能作为单独的分区,通常最好将/var从根分区移到/usr分区。(有时这样做是为了减少根分区的大小,或者当根分区中的空间不足时。)但是,不能将/var链接到/usr,因为这会使/usr和/var的分离更加困难,并且可能会造成命名冲突。而是将/var链接到/usr/var。
应用程序通常不能将目录添加到/var的顶层。只有当这些目录具有系统范围内的含义时,才应该添加它们,并在查阅中添加
5.2 要求
/var
中需要以下目录或目录的符号链接:
Directory | Description |
---|---|
cache | 应用缓存数据 |
lib | 可变状态信息 |
local | Variable data for /usr/local |
lock | Lock files |
log | 日志文件和目录 |
opt | /opt 可变数据 |
run | 与运行进程相关的数据 |
spool | Application spool data |
tmp | Temporary files preserved between system reboots |
有些目录是“保留”的,因为它们不能被某些新应用程序任意使用,因为它们会与历史和/或本地实践冲突。 他们是:
/var/backups/var/cron/var/msgs/var/preserve
5.3 具体选择
如果安装了相应的子系统,则以下目录或目录的符号链接必须位于/var
:
Directory | Description |
---|---|
account | Process accounting logs (optional) |
crash | 系统崩溃转储(可选) |
games | 可变游戏数据(可选) |
mail | 用户邮箱文件(可选) |
yp | 网络信息服务(NIS)数据库文件(可选) |
5.4 /var/account:进程统计日志(可选)
5.4.1 目的
此目录包含当前活动进程accounting logs和综合进程使用情况数据(由lastcomm和sa在某些类UNIX系统中使用)。
5.5 /var/cache:应用程序缓存数据
5.5.1 目的
/var/cache
用于应用程序的缓存数据。 由于耗时的I / O或计算,这些数据是本地生成的。 应用程序必须能够重新生成或恢复数据。 与/var/spool
不同,可以删除缓存的文件而不会丢失数据。 数据必须在应用程序的调用和重新引导系统之间保持有效。
位于/var/cache
下的文件可能以特定于应用程序的方式,系统管理员或两者都过期。 应用程序必须始终能够从手动删除这些文件中恢复(通常是因为磁盘空间不足)。 对缓存目录的数据格式没有其他要求。
5.6 /var/crash:系统崩溃转储(可选)
5.6.1 目的
此目录包含系统崩溃转储。 截至本标准发布之日,Linux不支持系统崩溃转储,但可能受其他可能符合FHS的系统支持。
5.7 /var/games:可变游戏数据(可选)
5.7.1 目的
任何与/usr
游戏相关的可变数据都应该放在这里。 /var/games
应该包含以前在/usr
找到的可变数据; 静态数据(如帮助文本,级别描述等)必须保留在其他位置,例如/usr/share/games
。
解释
/var/games
已经给出了自己的层次结构,而不是像在本标准的1.2版本中那样将它放在/var/lib
下面。 分离允许本地控制备份策略,权限和磁盘使用,以及允许主机间共享并减少/var/lib
混乱。 另外, /var/games
是BSD传统上使用的路径。
5.8 /var/lib:变量状态信息
5.8.2 要求
/var/lib
中需要以下目录或目录的符号链接:
目录 | 描述 |
---|---|
misc | 杂项状态数据 |
5.8.3 具体选择
如果安装了相应的子系统,则以下目录或目录的符号链接必须位于/var/lib
:
Directory | Description |
---|---|
<editor> | Editor backup files and state (optional) |
<pkgtool> | Packaging support files (optional) |
<package> | State data for packages and subsystems (optional) |
color | Color management information (optional) |
hwclock | State directory for hwclock (optional) |
xdm | X display manager variable data (optional) |
5.8.4. /var/lib/<editor> : 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
此目录包含未放在/var/lib中的子目录中的可变数据应该尝试在这个目录中使用相对惟一的名称,以避免名称空间冲突
5.9 /var/lock:锁文件
5.9.1 目的
锁文件应存储在/var/lock
目录结构中。
锁定多个应用程序共享的设备和其他资源的文件,例如最初在/usr/spool/locks
或/usr/spool/uucp
找到的串行设备锁定文件,现在必须存储在/var/lock
。 必须使用的命名约定是“LCK ..”,后跟设备的基本名称。 例如,要锁定/ dev / ttyS0,将创建文件“LCK..ttyS0”[43]
[43]然后,希望使用/dev/ttyS0的任何东西都可以读取锁文件并相应地执行操作(/var/lock中的所有锁都应该是全局可读的)。
5.10 /var/log:日志文件和目录
5.10.1 目的
此目录包含其他日志文件。 大多数日志必须写入此目录或相应的子目录。
5.10.2 具体选择
如果安装了相应的子系统,则以下文件或文件的符号链接必须位于/var/log
:
文件 | 描述 |
---|---|
lastlog | 每个用户上次登录的记录 |
messages | 来自 syslogd 的系统消息 |
wtmp | 所有登录和注销的记录 |
5.11 / var / mail:用户邮箱文件(可选)
5.11.1 目的
必须可以通过/var/mail
访问邮件假脱机,并且邮件假脱机文件必须采用<username>
形式。[44]
[44]请注意, /var/mail
可能是指向另一个目录的符号链接。
此位置中的用户邮箱文件必须以标准UNIX邮箱格式存储。
5.12 /var/opt:/opt的可变数据
5.12.1 目的
/opt
中的软件包的可变数据必须安装在/var/opt/<subdir>
,其中<subdir>
是/opt
中子树的名称,其中存储了附加软件包中的静态数据,除非where被/etc
的另一个文件取代。 没有结构强加于/var/opt/<subdir>
的内部排列。
5.13 /var/run:运行时可变数据
5.13.1 目的
此目录曾用于描述系统自引导以来的系统信息数据。 这些功能已移至/run
; 此目录的存在是为了确保与使用此规范的旧版本的系统和软件兼容。
5.13.2 要求
通常, /run
的要求也适用于/var/run
。将/var/run实现为/run的符号链接是有效的。
utmp文件位于这个目录中,它存储关于当前使用系统的用户的信息
除了访问/var/run/utmp
之外,程序不应直接访问/var/run
和/run
。[45]
[45]这是为了防止混淆 transient files 所在的位置。 通常,程序应使用/var/run
或/run
来访问这些文件,而不是两者。
5.14. /var/spool : Application spool data
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)的可变数据(以前称为Sun黄页(YP))必须放在此目录中。
第6章 操作系统特定附件
本节提供仅适用于特定操作系统的附加要求和建议。本节的材料不应与基本标准相冲突。
6.1 Linux的
这是Linux操作系统的附件。
6.1.1. /: Root directory
在Linux系统上,如果内核位于/
,我们建议使用名称vmlinux
或vmlinuz
,它们已在最近的Linux内核源程序包中使用。
6.1.2 /bin:基本用户命令二进制文件(供所有用户使用)
需要它们的Linux系统将这些附加文件放入/bin
:
setserial
6.1.3 /dev:设备和特殊文件
/dev
下必须存在以下设备。
/dev/null
写入此设备的所有数据都将被丢弃。 从此设备读取将返回EOF状态。
/dev/zero
This device is a source of zeroed out data. 写入此设备的所有数据都将被丢弃。 A read from this device will return as many bytes containing the value zero as was requested.
/dev/tty
该设备是进程控制终端的同义词。 打开此设备后,所有读取和写入操作就像实际控制终端设备已打开一样。
基本原理
以前版本的FHS对/dev
有更严格的要求。 其他设备也可能存在于/dev
。 设备名称可以作为位于/dev
或/dev
子目录中的其他设备节点的符号链接存在。 没有关于major/minor 数值的要求。
6.1.4 /etc:特定于主机的系统配置
Linux系统需要他们将这些额外的文件放入/etc 。
-
lilo.conf
6.1.5. /proc : 内核和进程的虚拟文件系统信息
proc
文件系统是用于处理进程和系统信息事实上的标准Linux方法,而不是/dev/kmem
和其他类似方法。 我们强烈建议您存储和检索进程信息以及其他内核和内存信息。
6.1.6 /sbin:基本系统二进制文件
Linux系统将与文件系统维护和 boot loader 程序管理相关的命令放置到/sbin中。
/sbin
可选文件:
-
Static binaries:
-
ldconfig
-
sln
-
ssync
-
当出现问题时,静态的 ln (sln) 和静态的 sync (ssync)是有用的。由于 ldconfig (通常位于/usr/sbin)存在,并可以作为升级动态库的指导工具,因此 sln 的主要用途(在一个糟糕的升级后修复 /lib 内的
错误符号链接)现在已经不是主要问题了。在一些紧急情况下,静态的 sync 是有用的。请注意,标准的 ln and sync 不必是的静态链接版本,但可能是。
ldconfig二进制文件对于/sbin
是可选的,因为站点可能选择在引导时运行ldconfig ,而不是仅在升级共享库时运行。 (目前尚不清楚在每次启动时运行ldconfig是否有利。)即便如此,有些人喜欢使用ldconfig来解决以下问题(太常见):
-
我刚刚删除了
/lib/<file>
。 -
我找不到库的名称,因为ls是动态链接的,我使用的是没有内置ls的shell,我不知道使用“ echo * ”作为替换。
-
我有一个静态sln ,但我不知道该怎么调用链接。
杂项
ctrlaltdel
kbdrate
为了应对有些键盘的重复频率高到无法使用,可以在某些系统上的/sbin
安装kbdrate 。
由于Ctrl-Alt-Del键组合在内核中的默认操作是立即硬重启,因此通常建议在以读写模式挂载根文件系统之前禁用该行为。一些 init 套件能够禁用Ctrl-Alt-Del,但其他 init 套件可能需要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:源代码
对于基于glibc
系统,此目录没有具体的指导原则。 对于基于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
可能是内核源代码树的符号链接。
重要的是内核包含的文件位于/usr/src/linux
而不是/usr/include,
因此,当系统管理员第一次升级内核版本时,不会出现问题。
6.1.10. /var/spool/cron : cron and at jobs
This directory contains the variable data for the cron and at programs.
该目录包含 cron和 at 的可变数据。
-------------------------- END ---------------------------
附基于busybox编译之后,以FHS 3.0 为标准进行的添加:
#!/bin/sh#基于FHS v3.0 必选内容
# 作者:sunqian# /中需要以下目录或目录的符号链接,参考ubuntu 18.04 是目录
mkdir bin boot dev etc lib media mnt opt run sbin srv tmp usr var#/etc中需要以下目录或目录的符号链接,参考ubuntu 18.04 是目录
mkdir -p etc/opt# /lib 目录下至少需要 libc.so.* 或 ld* 之一# /sbin中需要以下命令或命令的符号链接 shutdown,参考ubuntu18.04,/sbin/shutdown -> /bin/systemctl 指向可执行文件
#busybox目前没有这个命令
#cd sbin
#ln -s ../bin/systemctl shutdown
#cd ../# usr中需要以下目录或目录的符号链接
mkdir -p usr/bin usr/lib usr/local usr/sbin usr/share
mkdir -p usr/include#以下目录或目录的符号链接必须位于/usr/local中
mkdir -p usr/local/bin usr/local/etc usr/local/games usr/local/include usr/local/lib usr/local/sbin usr/local/share/ usr/local/src#其中 man 是目录的软链接 man -> share/man
mkdir -p usr/local/share/man
cd usr/local
ln -s share/man man
cd ../../#以下目录或目录的符号链接 必须包含在 /usr/share中
mkdir -p usr/share/man usr/share/misc# /var中需要以下目录或目录的符号链接,其中两个目录参考ubuntu18.04 lock -> /run/lock,run -> /run
mkdir -p var/cache var/lib var/local var/log var/opt var/spool var/tmp
cd var
ln -s ../run run
cd ../mkdir -p run/lock
cd var
ln -s ../run/lock lock
cd ../
#/var/lib中需要以下目录或目录的符号链接
mkdir -p var/lib/misc#如果安装了相应的子系统,则以下文件或文件的符号链接必须位于/var/log
touch var/log/lastlog var/log/messages var/log/wtmp#utmp文件位于/var/run,它存储关于当前使用系统的用户的信息
touch var/run/utmp#以下是特定于linux操作系统的
#如果内核位于/ ,我们建议使用名称vmlinux或vmlinuz#/dev下必须存在以下设备,/dev/null,/dev/zero,/dev/tty#inux系统需要他们将这些额外的文件放入/etc
#lilo.conf# /proc 内核和进程的虚拟文件系统信息
mkdir proc#/sys:内核和系统虚拟文件系统信息
mkdir sys# usr/src
mkdir -p usr/src
这篇关于Linux 文件系统层级标准 Filesystem Hierarchy Standard (FHS)3.0 基本全章节中文翻译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!