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


22

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

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


7
例如,如果我们在单独的分区内/usr/lib/libxml.so/usr分区内都有XML解析库,将会发生什么情况?为了解析/etc/fstab系统,必须挂载/usrz in order to load libxml , but to do so it would have to parse / etc / fstab`才能知道要挂载的文件系统。为了避免这种情况,XML解析器可能必须是内核的一部分,这听起来并不是一个好主意。
el.pescado 2014年

4
@ V0R73X,如果您认为此问题是一个更通用的Linux问题,则还有另一个Stack站点,称为UNIX & Linux Stack Exchangeunix.stackexchange.com。两者可能都还可以,而且这里已经有答案了,只是为了将来而扔掉。
trysis

8
XML等并非总是更好的格式。表是一个表,应该这样存储。实际上,有些人认为XML不利于一切plus.google.com/+LinusTorvalds/posts/X2XVf9Q7MfV
alfC 2014年

2
JSON不应用于配置文件。它不支持注释,这对于解释配置选项以及通过注释掉部分配置来尝试是必不可少的。
artbristol 2014年

2
XML是文档传输格式,而不是配置文件格式。
马修·伊夫,2014年

Answers:


82

/etc/fstab 它比XML和JSON古老得多,并且由于许多程序使用它来更改其格式将是一场噩梦。

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

解析XML非常困难,如果您不能在外部库上进行中继,那么您真的想避免使用XML。JSON有点简单,但仍然相当困难。

的语义/etc/fstab非常简单,它们不包含任何树状数据结构或其他任何奇特的东西。您只需要包含六个值的记录即可。

用空格分隔的值足以满足此要求,即使您只有C标准库,也可以轻松解析它们。

因此,没有理由使用JSON,XML或类似的东西。


白色分隔的字段足以满足fstab的需要。不想仅仅为了这样做而使事情变得更复杂。
Michael Martinez 2014年

CSV会变得更加简单和容易
Sled 2014年

3
@ArtB为什么您认为更改定界符会改变解析文件的复杂性?
Dan Neely 2014年

取决于引用,转义等规则。CSV可能更易于解析,因为定界符始终是一个char而不是当前使用的可变长度定界符。但是当前的格式允许更好的人类可读性,这也是一个重要的价值。
Florian Diesch 2014年

32

您应该真正读过Eric Raymond的Unix编程艺术。您似乎在假设Unix设计师如果知道XML就会使用XML /etc/fstab。相反,尽管XML并不是专门发明的,但他们很清楚其类似的前身,并故意拒绝使用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并不总是最适合您自己的配置文件。


18

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


4
这个答案实际上并不表明fstab文件/格式与一样古老mount,您似乎只是暗示。根据man fstab此fstab文件格式的祖先出现在4.0BSD中。 ”(BSD短语为“ fstab文件格式出现在4.0BSD中。 ”)。4.0BSD于1980年发布。
丹尼尔·贝克

@DanielBeck所以,我的猜测很幸运,是在1985
。– RaduRădeanu2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.