配置:为什么不conf选项=文件名和conf值=文件内容

配置:为什么不conf选项=文件名和conf值=文件内容

为什么 Unix 范例之一将配置名称(又名属性名称)和配置值都保存在配置文件中?
另一种方法是将属性名称保存在文件名中,并且仅将配置值保存在文件内,遵循 KISS(保持简单和愚蠢)原则。仍然可以使用文件夹对配置文件进行排序。据我所知,类似的东西已经在 Linux 上的 /proc 内的一些文件中实现了,尽管我从未在其他地方见过它。
据我所知,Unix 哲学是这样说的:“一切皆文件”。为什么不在这里?

答案1

这里有一些关于为什么配置文件没有逐选项分解为如下格式的想法:

config
    default
        key
        key
        ...
        key
    other
        key
        key
        ...

其中第一个子目录是配置类型,里面的每个文件(“key”在这里)都是单独的配置选项,每个都有一个值,即文件的内容。所有这些都是我一路走来所学到的,当然也有很多例外。

  1. 总的来说,大多数 UNIX / Linux 实用程序一次操作一个文件,逐行,而不是多个文件。为什么?原因有很多,但这似乎是处理输入的最简单的方法。从编程界面查看时,大多数文件只是一系列行。行(一些文本后跟\nASCII 换行符)实际上是大多数应用程序中最基本的数据单元,而不是文件。在旁边:考虑一下您的终端被设计为在用户工作时逐行打印在纸上。老实说,现代并没有太大变化,tty因为它仍然被视为串行接口。

  2. 考虑这样一种情况,对于像套接字服务器或其他守护程序这样的复杂程序,有很多很多的配置选项。对于必须打开数百个文件来搜索默认值的可能派生的程序来说,会产生两个惩罚:打开文件描述符限制(很容易绕过)和每个文件的几个系统调用。系统调用可以累加,因为程序必须向内核请求读取和打开文件的帮助。

  3. ed使用传统编辑器(显然是赢家 :D )或 和 等实用程序来sed更新和编辑文件通常要简单得多awk。在大量基于文件的配置选项上使用传统的编辑工具确实很不方便。此外,搜索大量选项将成为用户 shell 的一项练习,而不是编辑器真正可能的任务。如果大多数配置选项只是简单的值,echo那么某些 shell IO 重定向将成为编辑器的选择(如果我了解您的偏好,这可能并不是一件坏事)。

  4. 评论。配置文件可以有更多的注释而不是选项,我真的喜欢评论。如果将配置文件交换为配置目录,人们最好习惯于制作自述文件,然后突然间我们那里就有了一个令人讨厌的基于行的文件;)

总的来说,我想说基于文件的配置是 UNIX/Linux 系统的骨子里。可以用不同的方式来做吗?当然。当前的范式是最好的方法吗?它可能适用于 UNIX / Linux 系统,但不适用于目录替换文件作为输入接口点的其他环境。

答案2

考虑广泛使用的文本编辑器 Vim。 Vim 有超过 360 个选项,许多其他功能可以通过多种方式进行配置。当 Vim 启动时,它会读取一些初始化文件——一个系统范围的初始化文件、一两个用户特定的初始化文件,可能还有几个其他设置语法突出显示、菜单等的文件。根据您建议的设置,Vim 需要查找(即尝试打开)超过 360 个系统范围的选项设置文件,然后是 360 个用户特定的选项设置文件,并且将仍然需要阅读常规配置文件,因为 Vim 是可编写脚本的,并且最有趣的功能都是使用脚本语言配置的。尝试打开数百个文件只是为了启动文本编辑器是相当低效的。

现在真正的问题来了。某些选项可以设置为依赖于其他选项的值;在常规配置文件中这很简单——只需确保以正确的顺序设置它们即可。例如,根据您建议的设置,无法确保选项“兼容”设置在“退格”之前。在常规配置文件中,用户可以使用脚本语言来使某些选项的值适应操作环境;在您的设置中这样做会很尴尬。

你所描述的实际上是Windows注册表。注册表被存储为某种数据库而不是大量的小文件是有原因的。

相关内容