Enghish Version

MandrakeUser.Org - Your Mandrake-Linux Knowledge Base!

* DocIndex - Basics

文件系统的层次 第一篇

* 一般特性
* 原因与结果
* 现存问题

相关资源:

File system Hierarchy Standard (FHS)
MDK Reference, II.8

Revision / Modified: April 20, 2002
Author: Tom Berger
Translator: Wu XiaoGuang

* 一般特性

在 UNIX 操作系统家族中,文件系统具有相同的特征:

  • 完全层次化(目录树唯一
  • 根据文件功能而不是程序类型来划分,即没有特定的程序目录(program directories)

所谓层次(hierarchy),指的是目录象是一棵真正的树,按照设计顺序,从根目录(/)依次延伸。这与‘盘符’(drives)的概念有很大不同。
在微软的 Windows 系统中,您几乎可以将文件放在任何地方:C 盘、D 盘、E 盘等。这样的层次结构由程序自行组织(即程序目录),而不是由系统设定。
而 UNIX(及 Linux),则根据各个启动进程的重要性,相应地排列由根目录‘/’延伸出来的子目录。由操作系统决定,程序的各个文件将安放到哪些目录中。不同目录针对的是不同种类的文件,而不是根据不同的软件。

如果您在微软的 Windows 下安装软件,大多数文件可能都将放在该软件自己的目录下。比如,帮助文件可能在‘program name\’或‘program_name\help’目录下,或许还会在‘program name\hoopy\frog\turnip’。

在 Linux 中,程序文档放在‘/usr/share/doc/program_name’,man page 在‘/usr/share/man/man[1-9]’,info page 在‘/usr/share/info’。不同的文件正是以这种方式与系统层次紧密结合。

* section index * top

* 原因与结果

之所以这样安排,其中的一个原因是,集中化的文件系统层次给管理员提供了方便。比方说,对一台机器的修改很容易就可以通过网络传送到客户。

这种结构也就产生了易使新手迷惑的 分区挂载 概念。您硬盘上所有 GNU/Linux 分区都要挂到载入目录(即载入点,mount points)上,然后您通过这些目录(如‘/’、‘/usr’或‘/mnt/cdrom’等)来访问。不管载入的是本地分区还是网络服务器,这样都可以与系统实现无缝结合。无论是否载入分区或外部介质,挂接名称是不会变的。而在 Windows 中,新添的本地盘符可能会使后面的盘符也跟着改变,对网络分区(networked partition)则以外加盘(extra drives)来处理。

另一个原因是 Linux 用系统内存缓存了硬盘上的许多信息 ,这样可以加速存取速度。
所以,一定要在系统关闭前,将这些缓冲信息存到硬盘上(flush)。否则,文件处于不确定状态(undetermined state),这是很糟糕的事。
正常关机过程中,flushing 在卸载(unmount)分区时完成。千万不要在运行时突然关闭系统!由于 Linux 的文件系统很健壮,您可能屡试不爽,但万一重要文件被破坏,那可就惨了。只要按 <CTRL ALT DEL> 或用合适的命令(如 init 6或按钮,系统就可以正常关机,然后重启,这样才能保证您系统文件的完整。

* section index * top

* 现存问题

到目前为止,我已经告诉您文件系统层次应该如何,现在是讲讲现实世界中的一些情况了。 ;-)

您会在接下来的几页中看到,这些观念在 Linux 中的实现并不理想,甚至有些人觉得这和理想还相距甚远。
Linux 总能吸引个人主义者。这些人对许多事情,比如某个文件应该放入哪个目录,都有自己的观点。随着各种发行套件的出现,这些差异形成了各自的宣言(manifest)。一些发行套件将挂接外部媒体的目录放在根目录中,而其他的——比如 Mandrake Linux,放入了‘/mnt’。基于 Red Hat 的发行套件将‘/etc/sysconfig’目录存放有关输入和网络设备的配置文件;而其他发行套件则根本没有这个目录,而将相应的文件放到了别的目录,或者处理同一件事时用了完全不同的处理机制。一些发行套件将 KDE 放在‘/opt’目录下,而其他的——如 Mandrake Linux,放到了‘/usr’。

甚至在给定的文件系统层次中,还存在不协调的情况。例如,图形子系统:XFree86,就有自己的目录层次。现有的层次尚未达到很成熟地步,还存在一些不足。

如果您自己编译程序,那就没有那么多问题:您修改 configure 脚本或 Makefile 以适应您的系统配置。但如果您使用编译好的包,比如 RPM,那就是另外一回事了。通常无法轻易地在不同的文件系统层次间实现转换。更有甚者:一些 RPM 包可能新建自己的层次,比方说,将 SuSE 发行套件中的 KDE 的 RPM 包安装到您的 Mandrake Linux 系统,可执行文件会放到‘/opt/kde2/bin’里。当然,这就无法运行了,因为 Mandrake Linux 以为是在‘/usr/bin’中。

对此有一些相应的解决办法(在 关于 RPM 的文章 里讨论),但当前的处境还是很不爽。因此,所有主要的 GNU/Linux 发行商(distributor)都参加了 Linux Standard Base project(Linux基础标准工程),现在正试图草拟一份 GNU/Linux 发行套件的常用标准。您可以相象,这可不是件容易的事,因为改变文件系统层次意味着发行商还要做很多额外的工作。所以,每个发行商都试图推出一份标准,能够尽量多地保留自己的现有层次……

LSB 还将处理 File system Hierarchy Standard project(FHS、前 FSSTND) 的提议。为了实现 FHS 和 LSB,Mandrake Linux 已经对文件系统层次进行了重组,这些改动也将在下页中讨论。

* section index * top

* 根目录


Legal: All texts on this site are covered by the GNU Free Documentation License.
Standard disclaimers of warranty apply.