Linux 中的目录结构

背景

因为 Linux 的开发者和开发团体太多,针对 LInux 的发行版本也比较多,如果每个团体对于该系统下的目录都有自己的一套标准,那么不同发行版本之间就会有很大的差异,因此就迫切地需要一种标准去统一 Linux 下的目录配置,因此就产生了 FHS(Filesystem Hierarchy Standard)标准。

FHS

FHS 主要希望让用户能够了解到已安装软件通常放置在那个目录下,进而希望独立的软件开发商、操作系统制造商以及系统维护人员,都能够遵守 FHS 的标准。从而 FHS 规范了每个特定的目录下应该要放置什么样子的数据。

FHS 根据文件系统使用的频繁程度与是否允许用户随意修改,将目录定义为了四种交互作用的形态:

  可分享(shareable)

不可分享(unshareable)

不变(static) /usr(软件存放处) /etc(配置文件)
  /opt(第三方辅助软件) /boot(启动与内核文件)
可变动(variable) /var/mail(用户邮箱) /var/run(程序相关)
  /var/spool/news(新闻组) /var/lock(程序相关)

上边提到的四种类型分别为:

  • 可分享:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载使用的目录。
  • 不可分享:自己机器上运行的设备文件或者是与程序有关的 socket 文件等,由于只与自身机器有关,所以就不适合分享给其它主机。
  • 不变:有些数据是不会经常变动的,跟随着发行版而不变动。如函数库,文件说明,系统关系员管理的主机服务配置文件等。
  • 可变动:经常修改的数据,例如日志文件,一般用户可以自行接收的新闻组等。

FHS 针对目录树架构只定义出了三层目录下面应该放置什么数据而已:

  • /(root,根目录):与启动系统有关;
  • /usr(unix software resource):与软件安装/执行有关;
  • /var(variable):与系统运行过程有关;

/

根目录是整个系统中最重要的一个目录,因为所有的目录都是由根目录衍生出来的,并且根目录还与启动、还原、系统修复等操作有关系。对于根目录,FHS 标准建议为:

根目录所在分区应该越小越好,并且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但性能比较好,根目录所在的文件系统也不容易发生问题。

FHS 在根目录中必须要存在的目录为:

目录 应放置文件内容
/bin

放置在单人维护模式下还能够被使用的命令。在 /bin 下面的命令可以被 root 与一般帐号所使用。

/boot

放置启动会用到的文件,包括 LInux 内核文件以及启动选项与启动所需配置文件等。LInux 内核最常使用的文件名为:nlinuz。

/dev 放置任何设备和接口设备,读写该目录中的文件就相当于读写某个设备。
/etc

放置系统主要的配置文件,如用户的帐号密码文件,各种服务的启动文件等。一般来说,这个目录下的各文件属性是可以让一般用户查看的,但是只有 root 才有权利修改。

FHS 建议不要放置可执行文件。FHS 还规范了几个重要的目录最好存在该目录下:

/etc/opt(必要):这个目录在放置第三方辅助软件 /opt 的相关配置文件;

/etc/X11/(建议):与 X Window 有关的各种配置文件都在这里,尤其是 xorg.conf 这个 X Server 的配置文件;

/etc/sgml/(建议):与 SGML 格式有关的各项配置文件;

/etc/xml/(建议):与 XML 格式有关的各项配置文件。

/lib

放置在启动时会用的函数库,以及在 /bin 或 /sbin 下面的命令会调用的函数库。FHS 还要求下面的目录必须要存在:

/lib/modules/:放置可抽换式的内核相关模块(驱动程序)。

/media

放置可删除的设备,包括软盘,光盘,DVD 等设备。

/mnt 可以暂时挂载某些额外的设备。
/opt 放置第三方辅助软件。自行安装的额外软件(非原本的发行版提供)可以安装在此处,之前的 Linux 习惯放置在 /usr/local 目录下。
run 早期的 FHS 规定系统启动后所产生的各项信息应该要放置到 /var/run 目录下,新版的 FHS 则规范到 /run 下方,由于 /run 可以使用内存来模拟,因此性能上会好很多。
/sbin 放置启动过程中所需要的,包括启动、修复、还原系统所需要的命令。某些服务器软件程序,一般放置到 /usr/sbin 当中。至于本机自行安装的软件所产生的系统执行文件,则放置到 /usr/local/sbin 中。
/srv srv 可以看作是 service 的缩写,是一些网络服务启动之后,这些服务所需要使用的数据目录,常见的服务例如 WWW,FTP 等。
/tmp 放置一般用户或是正在执行的程序暂时放置文件的地方,这个目录是任何人都能够存取的,所以需要定期清理。
/usr 见后
/var 见后

FHS 在根目录中建议可以存在的目录为:

目录 应放置文件内容
/home

系统默认的用户家目录(home directory)。在新增一个一般用户账号时,默认的用户家目录都会规范到这里,比较重要的有两个:

~:代表目前目前的家目录

~username:代表 username 的家目录

/lib<qual> 放置与 /lib 不同格式的二进制函数库,如支持 64 位的 /lib64 函数库等。
/root 系统管理员(root)的家目录。当进入单人维护模式而仅挂载根目录时,该目录就能够拥有 root 的家目录,所以会希望 root 的家目录与根目录放置在同一个分区中。

FHS 对于根目录除了上边所做出的规定之外,还有几个比较重要的目录:

目录 应放置文件内容
/lost+found

该目录是使用标准的 ext2,ext3,ext4 文件系统才会产生的一个目录,目的在于当文件系统发生错误时,将一些遗失的片段放置到该目录下,不过如果使用的是 xfs 目录的话,就不会存在该目录。

/proc 该目录本身是一个虚拟文件系统(virtual filesystem),它放置的数据都是在内存当中,例如系统内核,进程信息(process),外接设备的状态与网络状态等,本身不占用硬盘空间。
/sys 也是虚拟文件系统,主要记录内核和系统硬件信息相关的内容。包括目前已经加载的内核模块与内核检测到的硬件设备信息等,同样不占用硬盘空间。

/usr

由前边 FHS 的基本定义来看,/usr 中放置的数据属于可分享与不可变动。usr 是 UNIX Software Resource 的缩写,也就是操作系统软件资源所放置的目录,而不是 user 的数据。FHS 建议所有的软件开发者,应该将他们的数据合理地分别放置到这个目录的子目录,而不要自行建立该软件自己独立的目录。

FHS 在 /usr 目录中必须存在的目录为:

目录 应放置文件内容
/usr/bin/ 所有一般用户能够使用的命令都放在这里。/usr/bin 与 /bin 是一模一样的。FHS 要求此目录下不应该有子目录。
/usr/lib/ 与 /lib 功能相同,/lib 就是链接到此目录中的。
/usr/local/ 系统管理员在本机安装自己下载的软件(非发行版默认提供者),建议安装到此目录,这样比较便于管理。
/usr/sbin/ 非系统正常运行所需要的系统命令,最常见的的就是某些网络服务器软件的服务命令(daemon)。不过基本命令与 /sbin 也差不多,/sbin 就是链接到此目录中的。
/usr/share

主要放置可读的数据文件,当然也包括文件文件,在这个目录下放置的数据几乎是部分硬件架构均可读取的数据,因为几乎都是文本文件。比较常见的还有一些子目录:

/usr/share/man:在线帮助文档

/usr/share/doc:软件的说明文档

/usr/share/zoneinfo:与时区有关的时区文件

FHS 在 /usr 目录中建议可以存在的目录为:

目录 应放置文件内容
/usr/games/ 与游戏比较相关的数据放置处
/usr/include/ c/c++ 等程序语言的头文件(header)与包含文件(include)放置处,当以 Tarball 方式(*.tar.gz 的方式安装软件)安装某些程序时,会使用到其中的许多文件。
/usr/libexec/ 放置某些不被一般用户常用的执行文件或者脚本。
/usr/lib<qual>/

与 /lib<qual> 功能相同,/lib<qual> 就链接到此目录。

/usr/src/

放置一般源代码。

内核源代码则建议放置到 /usr/src/Linux/ 目录下。

/var

/var 主要针对经常性变动的文件,包括缓存,日志文件以及某些软件运行所产生的文件,包括程序文件等。

FHS 在 /var 目录中必须存在的目录为:

目录 应放置文件内容
/var/cache 应用程序本身运行过程中会产生的一些缓存
/var/lib/

程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。

/var/lock/ 某些设备或者文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时,可能产生一些错误的状况,因此就需要将该设备上锁(LOCK),以确保该设备只会给单一软件所使用。
/var/log/ 很重要。放置日志文件,比较重要的为 /var/log/messages,/var/log/wtmp等。
/var/mail/ 放置个人电子邮箱的目录,不过这个目录也被放置到 /var/spool/mail 目录中,通常这两个目录互为链接。
/var/run/

某些程序或服务启动后,会将它们的 PID 放置到这个目录中。与 /run 相同,这个目录链接到 /run 目录。

/var/spool/ 通常放置一些删除队列(排队等待其他程序使用的数据),这些数据使用后通常会被删除。

题外话

以上只是 FHS 中规定的内容,不同的发行版有自己的特色,但是总体框架仍是不变的,可以对比着来看。

参考资料

1.鸟哥的 LINUX 私房菜——基础学习篇(第四版):https://item.jd.com/12443890.html

发布了77 篇原创文章 · 获赞 5 · 访问量 4897

猜你喜欢

转载自blog.csdn.net/SAKURASANN/article/details/104296717