今天看一篇文章,里面提到了Linux文件系统层次标准(FHS)。之后我就看了FHS。由于本人读英文文章很慢,为了以后方便自己也方便大家,我就把Filesystem Hierarchy Standard翻译了下,可能有的地方不是很到位,请谅解。
如果您看了,觉得对您有点帮组,请支持一下,毕竟翻译该文章也花费了我两星期的业余时间。
如果要转载请注明出处,谢谢。
标准Linux文件系统层次标准(Filesystem Hierarchy Standard)
l 第二章:根文件系统
目的:
根文件系统所包含的东西必需足以启动,备份,恢复或修复系统。
l 为了启动系统,根分区必需存在足够的空间用来挂载其他的文件系统,其中包括了实用程序,配置信息,引导加载信息,和其他的一些基本启动数据。/usr/, /opt/, 和/var被设计为可位于其他的位置或其他的文件系统。
l 由经验丰富的系统维护者使用的,用来恢复或修复损坏的系统的工具,必需位于根文件系统。
l 为了备份一个系统,用于备份(备份到软盘,磁带等)的工具必需放在根文件系统。
注:根文件系统有足够的原因应该保持足够的小。
1. 有可能会从一个很小的媒介来挂载根文件系统。
2. 根文件系统通常为不空共享的,如果在一个服务器上,根文件系统太大那么会占用更多可共享的数据的存储空间。
3. 一个大的根文件系统可能和一个小的根文件系统出现不可兼容的问题。
4. 磁盘错误导致根文件系统数据损坏是一个最重要的问题。一个小根文件系统更不容因为系统崩溃导致里面的数据出错。
应用程序不应该在根目录创建文件或需要一个特殊的文件或目录。FHS层次结构的其他位置为应用程序包,提供了更多的灵活性。原因如下:
1. 出于性能和安全性的考虑,系统管理员应该保证根文件系统足够小和足够简单。
要求:
以下的目录或目录符号链接应该存在于‘/’(根目录)下。
目录 描述
bin 基本的二进制命令。
boot 引导装载器的静态文件。
dev 设备文件。
etc 主机特定的配置文件。
lib 基本的共享库和内核模块。
media 可移动媒介挂载点。
mnt 临时文件系统挂载点。
sbin 基本的系统二进制文件。
srv 系统提供的服务数据。
tmp 临时文件。
usr 二级层次结构。
var 可变数据。
以上描述的每个目录都在下边有详细的规定,由于/usr和/var的复杂性,我们用单独的章节对他们做完整的描述。
特殊选项:
如果安装了相应的子系统,那么以下目录或目录符号链接应该位于’/’(根目录)下。
目录 描述
home 用户主目录。(可选)
lib<qual> 其他类型的基础共享库。(可选)
root 根用户的主目录。(可选)
上边列出的每个目录,在下边的单独小节有详细的规定。
/bin : 用户基础的二进制命令(由所有用户使用)
目的:
/bin中包含的命令,可以被系统管理员和其他的用户使用,但必须在没有其他文件系统被挂载的情况下(如,单用户模式)。这里边可能还有被脚本间接使用的命令。
要求:
/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 流编辑器。
sh Bourne命令解释程序。
stty 改变或打印终端线路设置。
su 改变用户ID。
sync 刷新文件系统缓冲区。
true 什么也不做,表示成功。
umount 取消挂载的文件系统。
uname 打印系统信息的实用程序。
如果/bin/sh不是一个真的Bourne shell,那么必须通过一个硬链接或一个软链接将它链接到一个真的shell。
“[“ 和”test”必须一起放在/bin下或是/usr/bin下。
特殊选项:
如果安装了相应的子系统,以下程序或程序符号链接,应该放在/bin下。
命令 描述
csh C shell。(可选)
ed ed 编辑器。(可选)
tar tar 归档程序。(可选)
cpio cpio归档程序。(可选)
gzip GNU压缩程序。(可选)
gunzip GNU解压程序。(可选)
zcat GNU解压程序。(可选)
netstat 网络统计程序。(可选)
ping ICMP网络测试程序。(可选)
如果”gunzip”和”zcat”程序存在,那么它们符号链接或硬链接到gzip。/bin/csh也许是/bin/tcsh或/usr/bin/tcsh的符号链接。
/boot : 启动引导静态文件
目的:
该文件夹下存储除配置文件外的其他启动时候需要的文件,这些文件用于内核开始执行用户模式程序之前。
特殊选项:
操作系统的内核必需位于/或/boot下。
/dev : 设备文件
目的:
该文件目录是特殊文件或设备文件所在的目录。
特殊选项:
该目录下的设备文件在可能的情况下需要手动建立。该文件下必需包含一个MAKEDEV命令,它用于在需要的时候创建设备,通过这些设备可以访问位于内核的驱动程序,该命令是一个脚本程序,一般是一个符号链接,链接到/sbin/MAKEDEV。
/etc : 主机特定的系统配置
目的:
在/etc层次结构下包含配置文件,一个本地配置文件用于控制程序的操作,它必须是静态的且不能是可执行二进制文件。
要求:
不能有二进制文件位于/etc下。
以下目录,或符号链接目录在/etc中是需要的:
目录 描述
opt 用于配置/opt目录
X11 用于配置X窗口系统(可选)
sgml 用于配置SGML(可选)
xml 用于配置XML(可选)
特殊选项:
1. 如果安装了相应的子系统,那么以下目录或目录符号链接必须在于/etc下:
目录 描述
opt 用于配置/opt
2. 如果安装了相应的子系统,那么以下文件或文件符号链接必须在/etc下:
文件 描述
csh.login 用于C shell 登陆,对整个系统的初始化文件。(可选)
exports NFS文件系统访问控制列表。(可选)
fstab 关于文件系统的静态信息。(可选)
ftpusers FTP守护程序的用户访问控制列表。(可选)
gateways 该文件列出了路由的网关。(可选)
gettydefs 用于getty的终端设置。(可选)
group 用户组文件。(可选)
host.conf 域名服务器查找主机名的配置文件。(可选)
hosts 关于主机名的静态信息。(可选)
hosts.allow 用于TCP包的主机访问控制文件。(可选)
hosts.deny 用于TCP包的主机访问控制文件。(可选)
hosts.equiv 该文件列出了remote login,rsh,rcp的信任主机列表。(可选)
host.lpd 该文件列出了lpd服务的信任主机列表。(可选)
inetd.conf inetd(网络请求守护进程)配置文件。(可选)
inittab 初始化配置文件。(可选)
issue 预登陆消息和鉴定文件。(可选)
ld.so.conf 额外共享库列表文件。(可选)
motd 当前的邮件登陆消息。(可选)
mtab 关于文件系统的动态信息。(可选)
mtools.conf mtools的配置文件。(可选)
networks 关于网络名称的静态消息。(可选)
passwd 密码文件。(可选)
printcap lpd打印机数据库的功能配置。(可选)
profile 用于sh shell 登陆时,对整个系统初始化的文件。(可选)
protocols IP协议列表。(可选)
resolv.conf 域名服务器配置文件。(可选)
rpc rpc协议列表。(可选)
securetty 根用户的TTY访问控制文件。(可选)
services 网络服务器的端口名。(可选)
shells 有效登陆Shell的路径名。(可选)
syslog.conf 系统日志配置文件。(可选)
mtab 里存的是关于系统的动态信息,其实它不适合作为静态特性的/etc,它存在于/etc中是因为历史的原因。
/etc/opt : /opt的配置文件
目的:
作为主机特定配置文件,在安装了软件包后相应配置文件必须放在/etc/opt目录或其子目录下。子目录里存储来自安装包的静态数据。
要求:
没有任何结构是强制要求安排在/etc/opt/<subdir>。
如果一个配置文件必须位于不同地方,以使软件或系统正常运行,那么可以将它放在/etc/opt/<subdir>以外的地方。
理由:
请参考关于/opt的理由。
/etc/X11 : 用于配置X窗口系统(可选)
目的:/etc/X11是X11特定主机配置文件的存放位置。如果/usr以只读方式挂载,那么该目录需要允许本地控制。
特殊选项
如果安装了相应的子系统,那么以下文件或文件符号链接必须位于/etc/X11下。
文件 描述
Xconfig 该文件作为早期版本XFree86的配置文件。(可选)
XF86Config 该文件作为XFree86 v3和v4的配置文件。(可选)
Xmodmap 该文件作为总的X11键盘配置文件。(可选)
/etc/X11的子目录包括xdm和其他一些程序(如,窗口管理器)的配置文件。一般情况我们建议只有一个窗口管理器配置文件.*wmrc作为默认配置文件,并且应该命名为system.*wmrc(除非有一个更广义的命名)和不用子目录。一些窗口管理器子目录必须和它的二进制文件同名。
/etc/sgml : 用于配置SGML的配置文件。(可选)
目的:
一般用于配置关于SGML上层参数的文件被存放在这里。文件命名为*.conf表明是通用配置文件。文件命名为*.cat表明是DTD-specific的集中目录文件,其中包括了给定的DTD会用到的所有其他目录。超级目录文件编辑引用的所有集中目录。
/etc/xml : 用于配置XML的配置文件。(可选)
目的:
一般用于配置关于XML上层参数的文件被存放在这里。文件命名为*.conf表明是通用配置文件。超级目录文件编辑引用的所有集中目录。
/home : 用户主目录。(可选)
目的:
/home显然是一个相当标准的概念,但是它显然是一个站点特定的文件系统。不同主机的对该文件系统的组织是不同的。因此,没有程序会依赖于这个位置。
要求:
用户应用程序的特定配置文件以’.’(隐藏文件)开头来命名,并存储在用户的家目录里。如果一个应用程序需要多个配置文件,那么这些配置文件应该放在一个以’.’(隐藏目录)开头来命名的子目录中。在这种情况下,子目录中的文件就不用以’.’开头来命名了。
/lib:基本共享库和内核模块
目的:
在/lib目录下包含了启动系统和运行根文件系统下的命令所需要的共享库等。这些命令的二进制文件位于/bin和/sbin下。
要求:
至少需要以下两种命名方式的一种(它们可以是文件或符号链接):
文件 描述
libc.so.* C库的动态链接。(可选)
ld* 执行时链接器。(可选)
如果装载了C预处理器,那么/lib/cpp必需引用它,这是因为历史的原因。
特殊选项:
如果相应的子系统被安装了,下面的目录或目录符号链接,必需位于/lib。
目录 描述
模块 可装载的内核模块。(可选)
/media:可移动媒介挂载点
目的:
该目录包含用于挂载像软盘、光盘和zip硬盘等的子目录。
理由:
在历史上存在其他的移动媒介挂载点(像/cdrom,/mnt和/mnt/cdrom等)。将移动媒介直接挂载在根目录,会导致根目录下会有很多额外的目录。虽然现在常用/mnt子目录来挂载移动媒介,但是它影响一些老的传统用法,以前将/mnt作为临时的直接挂载点。
特殊选项:
如果相应的子系统被安装了,下面的目录或目录符号链接,必需位于/media下:
目录 描述
floppy 软盘驱动器。(可选)
cdrom CD-ROM驱动器。(可选)
cdrecorder CD烧写器。(可选)
zip Zip驱动器。(可选)
当系统中挂载了多种同一类型的媒介时,目录名需要加上一个数字用以区分,这个数字从0开始。
/mnt:临时文件系统挂载点
该目录被提供用于系统管理员挂载临时文件系统。此目录的内容是一个位置问题,它不能影响其他程序的运行方式。
此目录一定不能用来安装程序,如果实在要安装程序,可以用一个系统没有用的合适的临时目录来代替。
/opt:用于安装附加应用软件包
目的:
/opt 是保留给安装附加应用软件包的。
一个软件包安装在/opt中必须位于它独立的目录树下(如:/opt/<package>或/opt/<provider>),这个目录的名字应该是描述软件包或提供商的LANANA注册名称。
要求:
目录 描述
<package> 静态保对象
<provider> LANANA注册的供应商名称
目录/opt/bin, /opt/doc, /opt/include, /opt/info, /opt/lib和/opt/man是保留给本地系统管理员用的。软件包将提供一个“前端”文件被本地系统管理员放置(通过连接或者复制)在这些保存目录里。
被用户访问的程序必须放在/opt/<package>/bin里面或者在/opt/<provider>目录层次里。如果软件包提供了UNIX帮助文档,那么他们必须放在/opt/<package>/share/man里,或者放在/opt/<provider>目录层次里,且必须采用和/usr/share/man相同的子目录层次结构。
如果软件包的文件是可变文件,那么必须放在/var/opt下。查看/var/opt章节获得更多信息。
特定主机配置文件必须放在/etc/opt中,参考/etc/opt章节获得跟多信息。
一般不能有其他包的文件位于/opt, /var/opt, /etc/opt目录层结构之外,除了某些特定文件必须放在特定位置以便软件能够正常运行。例如,设备锁文件必须位于/var/lock中,设备文件必须位于/dev中。
发布版可能将软件安装在/opt中,但是不能在未经本地系统管理员同意的情况下修改或删除已安装的软件。
/root:跟用户的主目录(可选)
目的:
Root用户的主目录可能由开发商和个人喜好,而位于不同位置,但是这个位置推荐的默认位置。
/sbin:系统二进制文件
目的:
系统管理(和仅root用户的命令)使用的实用程序被存放在/sbin, /usr/sbin, 和/usr/local/sbin中,/sbin中包含引导,备份,恢复等至关重要的二进制文件。 修复系统的二进制文件位于/bin中。普通用户可用的系统工具位于/usr/sbin中。本地安装的系统管理程序应该放在/usr/local/sbin中。
要求:
以下命令或命令的符号链接在/sbin中是需要有。
命令 描述
shutdown 关闭系统的命令
特殊选项:
如果安装了相应的子系统,那么以下文件或文件符号链接必须位于/sbin目录下:
命令 描述
fastboot 不检查磁盘的方式重启电脑。(可选)
fasthalt 不检查磁盘的方式关闭系统。(可选)
fdistk 分区表工具。(可选)
fsck 文件系统检查和修复工具。(可选)
fsck.* 特殊文件系统检查和修复工具。(可选)
getty getty程序。(可选)
halt 关闭系统。(可选)
ifconfig 配置网络接口。(可选)
init 初始化进程。(可选)
mkfs 创建文件系统命令。(可选)
mkfs.* 特殊文件系统创建命令。(可选)
mkswap 设置交换分区。(可选)
reboot 重启系统。(可选)
route ip路由表共用程序。(可选)
swapon 使能交换分区。(可选)
swapoff 停止交换分区。(可选)
update 定期刷新磁盘缓存守护进程。(可选)
/srv:系统提供的服务数据
目的:
存储由有系统提供的特定的数据,可以用于存储像www,ftp,rsync,cvs这些协议支持下的数据,但是不同主机有不同方法。
/tmp:存放临时文件
目的:
/tmp目录必需能够作为存储程序临时文件的地方。
程序不应该假设,在程序调用过程中存在于/tmp中的文件和目录会被保留。通常情况下推荐的规则为,在重启之后/tmp中的文件或目录应该被删除。