Linux 文件系统标准

作者:Garrett D'Amore

我们 Linux 社区中的许多人已经理所当然地认为存在关于 Linux 的优秀书籍,例如 Linux 文档项目制作的那些书籍。我们已经习惯于从不同的 Linux FTP 站点和发行版 CD-ROM 中获取各种软件包,并将它们顺利地集成在一起。我们已经接受了我们都知道关键文件(如 mount)可以在运行 Linux 的 任何 机器上找到。我们还理所当然地接受了基于 CD-ROM 的发行版,这些发行版可以直接从 CD 运行,只需少量物理硬盘或 RAM 磁盘用于某些可变文件,如 /etc/passwd 等。

情况并非总是如此。我们中的许多人还记得 Linux 的 SLS、TAMU 和 MCC Interim 发行版的时代。在那些日子里,每个发行商都有自己喜欢的方案,用于在目录层次结构中定位文件。(实际上,有些人可以追溯到更早的时候,回到启动盘和根磁盘是唯一将 Linux 安装到硬盘驱动器上的手段的日子,但我加入 Linux 社区的时间并没有那么长。)不幸的是,这在处理不同的发行版时引起了很多问题。

Linux 文件系统结构是一份由邮件列表合作贡献者创建的文档,他们希望帮助结束混乱状态。通常,该组或文档本身被称为“FSSTND”。这是“文件系统标准”的缩写,是原始 linux-activists 邮件列表频道的名称。(该邮件列表后来被移动到不同的位置。)这些人共同编写了一份文档,该文档帮助标准化了各地 Linux 系统上的文件系统布局。自该标准最初发布以来,大多数发行商已经全部或部分地采用了它,这极大地惠及了他们的用户。

自该标准的第一个草案以来,FSSTND 项目一直由 Daniel Quinlan,Daniel.Quinlan@linux.org 协调,但该标准的开发几乎与 Linux 本身一样开放。为该文档的开发做出贡献的人数非常多,因为它实际上是通过共识开发的。一些最重要的贡献者列在 FSSTND 文档本身中。

FSSTND 小组设定了许多具体的目标。第一个目标是解决当时现有 Linux 发行版中存在的一些问题。那时,不可能拥有可共享的 /usr 分区,/bin 和 /usr/bin 之间没有明确的区别,不可能设置无盘工作站,并且对于哪些文件放在哪里存在普遍的困惑。第二个目标是确保与 Linux 和其他类 UNIX 操作系统中已使用的实际标准保持一定的合理兼容性。最后,该标准必须获得 Linux 社区内的开发人员、发行商和用户的广泛认可。如果没有这种支持,该标准将毫无意义,只会成为另一种文件系统布局方式。幸运的是,FSSTND 在实现其最初的目标方面取得了相当令人钦佩的成功。

Linux FSSTND 项目还有一些 没有 设定的目标。FSSTND 并不试图模仿任何特定的商业 UNIX 操作系统(例如 SunOS、AIX、BSD 等)的方案。此外,对于 FSSTND 涵盖的许多文件,该标准并不规定这些文件是否应该存在,而仅仅是 如果 它们存在,应该放在 哪里。最后,对于大多数文件,FSSTND 并不试图规定文件内容的格式。(当几个不同的软件包可能需要知道文件格式才能协同工作时,存在一些特定的例外情况,例如,包含持有锁的进程 ID 的锁文件。)总体目标是确定可以在机器上找到常见文件的位置(如果它们存在)。

在文件系统中定义某些文件位置的标准的概念早于 FSSTND。AT&T 的 SVID 定义了一些文件的位置,以及我们大多数人并不真正理解的许多其他内容。POSIX 为非常有限数量的文件提供了更清晰的标准。真正的 FSSTND 讨论始于 1993 年 8 月初。从那时起,尽管 Linux 社区中的一些人持悲观态度,但 FSSTND 取得了巨大的成功,自 1993 年 9 月以来发布了该文档的三个公开修订版。最新的 v1.2 版本于 1995 年 3 月 28 日发布。

我为什么要关心?

现在,如果你像我一样,你会问“这对我有什么用?” 嗯,答案取决于“我”是谁。FSSTND 对 Linux 用户、系统管理员、发行商、文档编写者和开发人员都有影响。

如果你是 Linux 用户,并且你不管理自己的 Linux 系统(当然,这种情况有点罕见),那么 Linux FSSTND 确保如果你已经有在另一台 Linux 机器上的经验,你将能够在期望的位置找到程序。它还确保你可能拥有的任何文档都有意义。(根据我自己的经验,没有什么比不准确的文档更令人恼火的了!)此外,如果你以前已经有一些 Unix 经验,那么 FSSTND 不应该与你习惯使用的东西有太大不同,但也有一些例外。

也许最重要的是,标准的制定将 Linux 带到了一个成熟的水平,作者和商业应用程序开发人员觉得他们可以支持它。最近 Linux 相关书籍的爆炸式增长就是证明。在 FSSTND 之前,编写关于 Linux 的书籍将是困难的,因为每个系统都不同。FSSTND 正在解决所有这些问题。

如果你管理自己的机器,你将获得上述 FSSTND 的所有好处。如果你遇到问题,你也可能会对其他人为你提供支持的能力感到更有信心。此外,定期升级你的系统也更容易。由于文件位置有一个约定的标准,软件包维护人员可以提供升级说明,这些说明不会让额外的旧文件留在你的系统中占用磁盘空间。

FSSTND 还意味着提供源代码包供你自行编译和安装的人员提供更多支持。例如,提供程序知道 sed 的可执行文件在 Linux 机器上的位置,并且可以在其安装脚本或 Makefiles 中使用它。例如,我已经编写了一个软件包,专门用于在安装手册页之前生成带有正确文件引用的手册页。如果你运行大型网络,FSSTND 可能会减轻你的许多 NFS 难题,因为它专门解决了以前使 /usr 的共享实现不切实际的问题。

如果你是发行商,那么你将受到 Linux FSSTND 的最大影响。你可能需要多做一些工作来确保你的发行版符合 FSSTND,但你的用户(以及你的业务)将从中受益。如果你的系统符合标准,第三方附加软件包(以及可能你自己的软件包)将与你的系统顺利集成。

当然,你的用户将获得上述所有好处,并且你的许多支持难题将得到缓解。你将从 FSSTND 的所有讨论和思考中受益,并避免自行设计文件系统结构时涉及的许多陷阱。如果你遵守 FSSTND,你还将能够利用 FSSTND 设计的各种功能。例如,FSSTND 使包含除 / 和 /var 目录中的某些文件之外的所有内容的“实时” CD-ROM 成为可能。

如果你为 Linux 编写文档,FSSTND 使这项工作变得容易得多,这对 Linux 社区来说是有意义的。你不再需要担心一个发行版与另一个发行版上锁文件的具体位置,也不必编写仅对特定发行版用户有用的文档。FSSTND 至少部分地促成了最近出版的 Linux 书籍的爆炸式增长。

如果你是开发人员,FSSTND 的存在大大减轻了你的许多难题。你可以知道重要系统二进制文件的位置,因此你可以从你的程序或 shell 脚本中使用它们。支持用户也变得容易得多,因为在解决支持问题时,你无需担心这些二进制文件的位置等问题。如果你是需要与系统其余部分集成的程序的开发人员,FSSTND 可确保你可以确定实现此目的的步骤。

例如,诸如 kermit 之类的应用程序,它们访问串行端口,需要知道它们可以独占访问 tty 设备。FSSTND 指定了一种通用的方法来做到这一点,以便所有符合标准的应用程序都可以协同工作。这样,你就可以专注于为 Linux 制作更出色的软件,而不是担心如何检测和处理不同 Linux 版本中的差异。

正如我已经指出的,Linux 社区对 FSSTND 的广泛接受对于标准和操作系统的成功至关重要。幸运的是,几乎每个 Linux 发行版都已构建为符合 Linux FSSTND。很有可能,如果你正在运行 Linux,那么你正在运行 FSSTND 实现。如果你的实现至少部分不符合 FSSTND,那么它可能 非常旧 或者你自己构建的。FSSTND 本身包含旨在符合 FSSTND 的一些发行版的列表。但是请注意,已知其中一些发行版在其 FSSTND 实现中偷工减料。

下一步是什么?

当然,FSSTND 小组仍然需要面对一些未解决的问题。即将到来的问题之一是架构独立的脚本和数据文件 (/usr/share) 的组织。到目前为止,Linux 仅在 i386 和兼容机器上广泛可用,因此标准化此类文件的需求并不存在。其他架构(MC680x0、Alpha、MIPS、PowerPC)端口的快速进展表明,这个问题很快就需要处理。正在讨论的另一个问题是创建 SVR4 中的 /opt 目录。此类目录的目标是为大型商业或第三方软件包提供一个安装位置,而无需担心 FSSTND 对其他目录层次结构的要求。

到现在为止,你的胃口应该已经被吊起来了,你可能想自己阅读实际的 FSSTND 文档。有关如何参与 FSSTND 的持续开发的信息包含在 FSSTND 本身中。参与者将不胜感激,如果你在加入之前仔细阅读完整文档 这样,你将更好地准备好为标准的开发做出有价值的贡献。

FSSTND 为 Linux 社区提供了一份优秀的参考文档,并已被证明是 Linux 成熟的重要因素。随着 Linux 的不断发展,FSSTND 也将如此。我们感谢 Linus Torvalds、H. J. Lu、自由软件基金会以及许多其他帮助使 Linux 可用 的人。FSSTND 团队帮助 标准化 了 Linux,使其对更广泛的受众有用。

我要感谢 Daniel Quinlan 对本文提出的许多宝贵的更正和改进建议。

你可以通过 FTP 从 tsx-11.mit.edu 的 /pub/linux/docs/linux-standards/fsstnd/ 获取 FSSTD 文档。在同一个目录中,还有一个由 Ian McCloghrie 维护的关于 FSSTND 的优秀 FAQ(常见问题解答)。

Garrett D'Amore 是圣地亚哥州立大学计算机科学专业的高年级学生,他在那里使用 Linux 和 SunOS 开发基于 TCP/IP 的客户端-服务器应用程序,使用 C++。他将于 12 月毕业,因此他欢迎感兴趣的雇主的咨询。你可以通过电子邮件 garrett@sdsu.edu 或通过 WWW http://www.sdsu.edu/~garrett/ 找到他

加载 Disqus 评论