为什么 /etc/fstab 不使用 XML 或 JSON?

jze*_*eus 21 fstab

这更像是一个一般的 Linux / 编程问题,但我已经编程了一段时间,我习惯于在用于配置目的的任何文件上使用诸如XMLJSON 之类的格式。

作为 Linux 新手,我意识到我遇到的第一个配置文件 ( /etc/fstab) 使用某种表格格式。那么为什么不是 XML 或 JSON?

Flo*_*sch 82

/etc/fstab 比 XML 和 JSON 古老得多,而且由于很多程序都在使用它,因此更改其格式将是一场噩梦。

此外,这 /etc/fstab需要在有功能系统之前进行解析,因为它用于挂载所有必要的文件系统。因此格式/etc/fstab应该尽可能简单,因为解析器不应该依赖于任何外部库。

解析 XML 非常困难,如果您不能中继外部库,您真的想避免它。JSON 稍微容易一些,但仍然相当困难。

的语义/etc/fstab非常简单,它们不包括任何树状数据结构或任何其他花哨的东西。您所需要的只是由六个值组成的记录。

空格分隔的值就足够了,即使您拥有的只是 C 标准库,它们也很容易解析。

所以没有理由使用 JSON、XML 或类似的东西。

  • @ArtB 为什么您认为更改分隔符会改变解析文件的复杂性? (3认同)

Kar*_*ldt 32

您真的应该某个时间阅读 Eric Raymond 的The Art of Unix Programming。您似乎在假设 Unix 设计者如果知道 XML 就会使用 XML /etc/fstab。相反,虽然 XML 还没有被专门发明,但他们很清楚它的类似前辈,并故意拒绝他们的配置文件,如/etc/fstab.

引用他关于 XML 的小节

XML 非常适合复杂的数据格式(老派的 Unix 传统会使用类似 RFC-822 的节格式来处理这种格式),尽管对于简单的数据格式来说太过分了。它特别适用于具有 RFC 822 元格式不能很好处理的复杂嵌套或递归结构的格式。

再往下一点:

XML 最严重的问题是它不能很好地与传统的 Unix 工具配合使用。想要读取 XML 格式的软件需要一个 XML 解析器;这意味着庞大而复杂的程序。此外,XML 本身相当庞大。在所有标记中查看数据可能很困难。

Unix 的理念是尽可能使配置易于脚本化和人类可读。您应该能够使用 awk、grep、sed、tr 和 cut 等工具处理配置文件,并在没有庞大库的情况下以脚本语言轻松解析它们。这是 Unix 成功背后的重要原因,不应被低估。

尽管 Eric Raymond 称赞 XML 能够处理“具有复杂嵌套或递归结构的格式”,但 /etc/fstab肯定不需要这些,因此为它选择了可能的最简单的文件格式。

因此,尽管 XML 肯定有其用途,但您可能需要考虑,地球上一些开创该领域的最聪明的程序员可能知道他们在做什么。也许 XML 并不总是最适合您自己的配置文件。


Rad*_*anu 18

我现在能想到的主要原因是:

  • 这个答案实际上并没有表明 `fstab` 文件/格式与 `mount` 一样古老,你似乎只是暗示了这一点。根据`man fstab`,“*这个fstab 文件格式的祖先出现在4.0BSD.*”(BSD 短语它“*The fstab 文件格式出现在4.0BSD.*”)。4.0BSD 于 [1980](https://en.wikipedia.org/wiki/Berkeley_Software_Distribution#VAX_versions) 发布。 (4认同)