哪个是 Linux 中使用的“标准”配置解析器库?

nan*_*ous 0 linux configuration libraries

在 Linux 应用程序中,我不想使用“我自己的”配置解析器,而是使用(应该是?)已经可用的配置解析器。简单地保持应用程序配置的维护简单并且不添加额外的库。

Aus*_*arn 8

确实没有“标准”配置解析器库。如果您仔细阅读/etc,您会发现以下组合:

  • XML 配置
  • Windows INI 样式配置
  • 基本 KEY=VALUE 配置
  • JSON(主要见于 Web 应用程序)。
  • YAML(主要见于较新的东西,尤其是用 Python 编写的)。
  • 看起来像 JSON 或 YAML 或 XML,但不是(参见 Nginx(看起来像 JSON,但不是)、Apache(看起来像 XML,但不是)和 Unbound(看起来像 YAML)的示例配置,但不是)。
  • 各种shell语言。
  • 各种看起来像 shell 语言但技术上不是的东西。
  • 各种脚本语言的源代码片段。
  • 可能还有其他我没有想到的事情。

至于与您的应用程序一起使用的内容:

  • 请对所有事物的热爱避免使用 XML。它不必要地冗长,解析起来非常复杂(因此需要很长时间和大量内存),并带来许多安全问题。在元素和属性之间获得适当的平衡也很重要,而且您通常会在以后的某个时候后悔为此做出的选择。这里唯一真正的优势是您几乎可以保证在您遇到的任何系统上都有一个有效的 XML 解析器。
  • Windows 风格的 INI 文件通常是一个安全的选择,尽管它们限制了配置结构的复杂性。为此存在许多库,您的系统可能已经至少有一个。它们在 Linux 上并不流行(经典的配置文件传统上是没有节头的 KEY=VALUE 对),但它们仍然被广泛使用,而且它们很容易理解。
  • 基本的 KEY=VALUE 对(理想情况下每行一个)解析起来非常简单,您甚至不需要库,但它们的功能非常有限。
  • JSON 安全且易于解析,得到广泛支持(如今几乎每种主要语言都有至少一个解析器),并且支持配置结构的任意嵌套。但是,它不支持注释(某些解析器可能支持,但结果不能互操作),这对于设计为使用文本编辑器编辑的文件不是很好。
  • YAML 是我个人的最爱,它相当安全且易于解析,对大多数人来说看起来很自然,支持评论,并且开销非常小。这里唯一的大事是缩进真的很重要,因为它占了语法的 80% 左右,再加上 YAML 需要空格进行缩进(没有制表符)的事实,如果使用的话,可能会有点麻烦你没有一个好的编辑器。
  • 如果您使用脚本语言,您可能会考虑使用源代码片段进行配置,但这样做时要非常小心。除非你非常小心你如何解析它们,你几乎让用户进行任意的东西到你的内在逻辑,如果他们想,这是一个客户支持恶梦(你最终让人们抱怨你打破了他们的配置,这碰巧包括你改变的核心程序内部的东西)。