标准Linux文件系统层次标准(Filesystem Hierarchy Standard,FHS)第二章

时间:2022-03-11 20:55:30

      今天看一篇文章,里面提到了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/X11X11特定主机配置文件的存放位置。如果/usr以只读方式挂载,那么该目录需要允许本地控制。

       特殊选项

       如果安装了相应的子系统,那么以下文件或文件符号链接必须位于/etc/X11下。

       文件                                   描述

       Xconfig                              该文件作为早期版本XFree86的配置文件。(可选)

       XF86Config                        该文件作为XFree86 v3v4的配置文件。(可选)

       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中的文件或目录应该被删除。