这更像是一个通用的Linux /编程问题,但是我已经进行了一段时间编程,并且习惯于在用于配置目的的任何文件上使用XML或JSON之类的格式。
我是Linux的新手,我意识到,碰到(/etc/fstab
)的第一个配置文件使用某种表格式。那么为什么不使用XML或JSON呢?
UNIX & Linux Stack Exchange
unix.stackexchange.com。两者可能都还可以,而且这里已经有答案了,只是为了将来而扔掉。
这更像是一个通用的Linux /编程问题,但是我已经进行了一段时间编程,并且习惯于在用于配置目的的任何文件上使用XML或JSON之类的格式。
我是Linux的新手,我意识到,碰到(/etc/fstab
)的第一个配置文件使用某种表格式。那么为什么不使用XML或JSON呢?
UNIX & Linux Stack Exchange
unix.stackexchange.com。两者可能都还可以,而且这里已经有答案了,只是为了将来而扔掉。
Answers:
/etc/fstab
它比XML和JSON古老得多,并且由于许多程序使用它来更改其格式将是一场噩梦。
除此之外,还 /etc/fstab
需要在有功能系统之前对其进行解析,因为该功能系统用于挂载所有基本文件系统。因此,的格式/etc/fstab
应尽可能简单,因为解析器不应依赖于任何外部库。
解析XML非常困难,如果您不能在外部库上进行中继,那么您真的想避免使用XML。JSON有点简单,但仍然相当困难。
的语义/etc/fstab
非常简单,它们不包含任何树状数据结构或其他任何奇特的东西。您只需要包含六个值的记录即可。
用空格分隔的值足以满足此要求,即使您只有C标准库,也可以轻松解析它们。
因此,没有理由使用JSON,XML或类似的东西。
您应该真正读过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并不总是最适合您自己的配置文件。
我现在可以想到的主要原因是:
fstab
文件是mount
命令最常用的mount
指挥的历史可能始于1985年
/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解析器可能必须是内核的一部分,这听起来并不是一个好主意。