18.3 文件系统层次结构标准

在本章中我们要介绍的最后一个标准是文件系统层次结构标准(Filesystem Hierarchy Standard,简称为FHS),它的网址为http://www.pathname.com/fhs/。

这个标准的目的是定义Linux文件系统的标准路径,使得开发者和用户可以在合理的位置找到需要的东西。长期以来,使用不同类UNIX操作系统的用户都对文件系统布局的细微区别感到无奈,而FHS向Linux发行版提供了一种方法来避免这样的问题。

乍看起来,Linux系统中的文件布局好像是对文件和目录基于历史实践的一种比较随意的安排。从某种程度上来说,事实确实如此,但这种布局是经过多年的合理演变才形成我们今天见到的构架的。大体的想法是将文件和目录分为如下3组。

❑ 对运行Linux的某一特定系统唯一的文件和目录,例如启动脚本和配置文件。

❑ 可以在运行Linux的不同系统之间共享的只读文件和目录,例如可执行应用程序。

❑ 可以在运行Linux或其他操作系统的不同系统之间共享的可读可写的目录,例如用户家目录。

虽然,在一个由Linux机器组成的网络中,确保只有一份主要程序目录的副本,并且可以在许多机器之间共享是非常好的做法,但在本书中,我们对在不同版本的Linux系统之间共享文件并不是太感兴趣。这种做法只对无盘工作站特别有用。

FHS定义的顶级结构包含一些必须存在的子目录和一小部分可选的目录,如表18-3所示。

表 18-3

18.3 文件系统层次结构标准 - 图1

另外,可能还会有一些其他目录也以lib为前缀,但这并不是很常见。你通常还会看到目录/lost+found(用于fsck命令进行文件系统的恢复)和目录/proc,后者其实是一个伪文件系统,它提供了对当前运行系统的一个映射。当前的FHS标准提到了/proc文件系统,但并不要求它一定存在。虽然我们在第4章简单介绍了/proc目录,但关于它的细节已超出了本书介绍的范围。

下面,我们将简单介绍根目录下每个标准子目录的用途。

❑ /bin:包含可以被root用户和普通用户使用的二进制文件,它们都可以在单用户模式下运行,即在其他一些目录结构还未装载的情况下也能单独运行。例如,核心命令如cat和ls都可以在这里找到,当然也包括命令sh。

❑ /boot:这个目录下放置的是启动Linux系统时所需使用的文件。这些文件通常都比较小,文件长度不超过100MB。我们通常会为这个目录单独划分一个分区,在基于PC的系统中这样做非常方便,但由于BIOS通常会对活动分区有所限制,所以需要将该分区分配在磁盘的前2G或4G空间中。为这个目录单独划分一个分区,可以使我们在决定如何分配剩余的磁盘空间时更灵活。

❑ /dev:这个目录下放置的是映射到硬件的特殊设备文件。例如/dev/hda将映射到第一个IDE磁盘。

❑ /etc:这个目录下放置的是配置文件。历史上有些二进制文件也放置在这个目录下,但在现在的大多数Linux系统中都不会再出现这种情况。在/etc目录下最有名的文件可能就是passwd文件,它包含系统中用户的信息。其他有用的文件有fstab(列出分区装载选项)、hosts(列出IP地址和主机名的映射关系)、httpd目录(包含Apache服务器的配置文件)。

❑ /home:这是用于放置用户文件的目录。正常情况下,每个用户都会在这个目录下有一个与他们的登录名相同的子目录,而这个子目录就是他们的默认登录目录。例如,用户rick在登录进系统后,将会发现自己位于目录/home/rick中。

❑ /lib:这个目录下放置的是基本的共享函数库和内核模块,特别是那些在系统启动或系统位于单用户模式时需要用到的文件。

❑ /media:这个顶级目录用于包含装载可移动媒体的其他子目录。其目的是消除不必要的顶级目录,如/cdrom和/floppy。

❑ /mnt:这个目录只是用来方便用户临时装载一些其他的文件系统。以前,一些Linux发行版还会在该目录中针对不同的设备添加一些子目录,如/mnt目录下的cdrom和floppy子目录,但现在用于装载这些设备的首选位置是在/media目录下,/mnt目录将作为一个顶级的临时装载位置。

❑ /opt:软件厂商在向系统中添加软件时会用到这个目录。按照惯例,Linux发行版一般不会将自己发布的软件放置在这个目录下,而是将这个目录开放给第三方厂商来使用。厂商通常会在这个目录下以它们的名字创建一个子目录,然后针对它们的应用程序,在这个子目录下继续创建如/bin和/lib等子目录。

按照惯例,大多数开放源码的Linux软件包将目录/usr/local作为它们的安装点。

❑ /root:这个目录下放置的是root用户使用的文件。它并没有放置在/home目录下的原因是,在单用户模式下,/home目录可能未被装载进系统。

❑ /sbin:这个目录下放置的是通常只能由系统管理员使用的命令,以及在系统启动时或进入单用户模式时需要使用的命令。命令fsck、halt和swapon等就在这个目录中。

❑ /srv:这个目录用于放置站点特定的只读配置数据,但它目前还未被普遍使用。

❑ /tmp:这个目录下放置的是临时文件。系统通常会在(但并不总是)启动时清理这个目录。

❑ /usr:这是一个相当复杂的二级文件系统,在这个目录下,通常将包含除在系统启动或进入单用户模式所需要的文件以外的所有系统类的命令和函数库。它包含许多子目录,如/bin、/lib、/X11R6和/local。

在UNIX和Linux发展的早期,/usr目录下还有用于记录日志和放置邮件队列等的子目录,但现在它们都已经从usr目录下移出并放置到var目录中。这样做的好处是,/usr目录作为一个可装载的文件系统,可以在大部分时间里以只读的方式装载到系统中。当/usr目录以只读方式装载时,它可以通过网络与其他系统共享,而且当系统由于一些不可控制的原因,如断电而造成停机时,这个目录中的内容也不容易遭到损坏。

❑ /var:这个目录下放置的数据是会经常改变的,如用于打印的队列文件、应用程序的日志文件和邮件队列目录等。