当前位置: 首页 > 科技观察

配置文件格式浅谈

时间:2023-03-18 23:20:03 科技观察

widgety流行的配置文件格式有几种,各有各的优点。找到最适合您的格式!您的计算机上有数千个配置文件。您可能永远不会直接使用这些文件中的大部分,但它们确实分散在您的/etc和~/.config、~/.local、/usr文件夹中。还有一些可能位于/var甚至/opt文件夹中。如果您不小心打开或更改了它们,您可能会想:为什么有些配置文件显示为一种格式,而另一些则显示为完全不同的格式?存储配置是一项非常灵活的任务,因为只要开发人员知道他们的代码是如何将数据获取到文件中的,他们就可以轻松地编写代码来根据需要提取数据。然而,技术行业非常喜欢带有详细文档的标准化事物,因此多年来出现了几种更常见的格式来简化配置任务。为什么我们需要配置文件配置文件对现代计算很重要。它们使您能够自定义与应用程序交互的方式,或应用程序与系统上其他程序交互的方式。使用配置文件,每次启动应用程序时,它都会“记忆”您喜欢如何使用它。配置文件的结构可以很简单,而且通常很简单。例如,如果您要编写一个应用程序,程序唯一需要知道的就是用户的首选名称,那么它的唯一配置文件可以只包含一个词:用户名。像这样:Tux但通常应用程序需要跟踪的不仅仅是一条信息,因此配置文件通常会有一个键和一个值:NAME='Tux'SPECIES='Penguin'即使没有编程经验,您也可以想象如何代码解析数据。下面是两个简单的示例,一个使用awk命令,另一个使用grep命令。这两个示例都只关注包含NAME“key”的行并返回出现在等号(=)之后的“value”:$awk-F'=''/NAME/{print$2;}'myconfig.ini'Tux'$grepNAMEfake.txt|cut-d'='-f2'Tux'同样的原则适用于任何编程语言和任何配置文件。只要你有一个统一的数据结构,你可以编写简单的代码,在需要的时候提取和解析它。选择一种格式为了确保普遍有效性,配置文件最重要的是它们是一致的和可预测的。您绝对不想做这样的事情:以保存用户首选项的名义,将随机信息存储在一个文件中,然后花几天的时间进行逆向工程以找到最终出现在文件中的随机信息。有几种流行的配置文件格式,每种格式都有自己的优点。INIINI文件使用键值对的格式:[example]name=Tuxstyle=widgety,fidgetyenabled=1这种简单的配置风格非常直观,只要不选择使用不好的键名(比如使用unampref就像神秘的键名只是替换名称)。这些键值对很容易解析和编辑。除了键和值之外,INI格式还可以分为部分。在下面的示例代码中,[example]和[demo]是配置文件中的两个部分:[example]name=Tuxstyle=widgety,fidgetyenabled=1[demo]name=Beastiefullscreen=1这些配置语句解析起来有点复杂复杂,因为有两个名称键。想象一下,一个粗心的程序员在这个配置文件中查询name并总是返回Beastie,因为那是文件中name的最后一个定义值。解析此类文件时,开发人员必须格外小心地搜索节中的键,这可能会很棘手,具体取决于用于解析文件的语言。然而,它仍然是一种流行的格式,大多数语言都会有一个库来帮助程序员解析INI文件。YAMLYAML文件是可以包含值或键值对的结构化列表:---Example:Name:'Tux'Style:-'widgety'-'fidgety'Enabled:1YAML格式很流行,部分原因是它看起来整洁的。数据放在相对于其上方数据的特定位置,并没有太多其他语法。然而,某些人的特征可能对其他人来说是个问题。许多开发人员对使用YAML犹豫不决,恰恰是因为它看重的是本质上不存在的东西。如果您不正确地缩进YAML,YAML解析器可能会将您的文件视为无效,即使不是这样,返回的数据也可能是错误的。大多数语言都有YAML解析器,并且有很好的开源YAMLlinters(验证语法的应用程序)来帮助您确保YAML文件的完整性。JSONJSON文件在技术上是YAML的子集,因此它们的数据结构是相同的,尽管它们的语法完全不同:{"Example":{"Name":["Tux"],"Style":["widgety","fidgety"],"Enabled":1}}JSON在JavaScript程序员中很流行,这并不奇怪,因为JSON代表JavaScriptObjectNotation。由于与Web开发密切相关,JSON是WebAPI的常见输出格式。大多数编程语言都有解析JSON的库。XMLXML使用标签作为配置值周围的键:Tuxwidgetyfidgety1Java程序员经常使用XML,Java有一套丰富的XML解析器。虽然XML以非常严格着称,但它也非常灵活。与具有一组特定标记的HTML不同,您可以在XML中自由创建自己的标记。只要你始终坚持相同的构建规则,并有一个好的库来解析它,你就可以准确、轻松地提取数据。有一些很好的开源linters可以帮助您验证XML文件,并且大多数编程语言都提供了用于解析XML的库。二进制格式Linux以纯文本配置而自豪。这样做的好处是你可以使用像cat这样的基本工具来查看配置数据,甚至可以使用你喜欢的文本编辑器来编辑配置。但是,某些应用程序以二进制格式配置,这意味着数据以非自然语言的格式编码。这些文件通常需要一个特殊的应用程序(通常是为它们配置的应用程序)来解释它们的数据。您不能查看这些文件,至少不能以任何有意义的方式查看,也不能在其宿主应用程序之外编辑它们。选择二进制格式的一些原因如下:速度:程序员可以使用自定义符号在二进制配置文件的特定位置注册特定的信息位。提取数据时不涉及搜索,因为所有内容都已编入索引。大小:文本文件可能会变大,如果您选择压缩文本文件,实际上是将其转换为二进制格式。二进制文件可以通过编码技巧变得更小(文本文件也是如此,但在某些时候您的优化会掩盖数据,因此文件也变成二进制文件)。晦涩难懂:一些程序员甚至不希望人们查看他们的配置文件,因此将它们编码为二进制数据。这通常只会让用户感到沮丧,并不是使用二进制格式的好理由。如果必须使用二进制格式进行配置,请使用已作为开放标准存在的格式,例如NetCDF。寻找有效的配置格式配置格式帮助开发人员存储应用程序所需的数据,并帮助用户存储他们希望应用程序如何运行的首选项。对于应该使用哪种格式的问题,可能没有错误的答案,只要您觉得您使用的语言能够很好地支持它。在开发应用程序时,查看可用格式,使用一些示例数据对其建模,查看和评估您的编程语言提供的库和实用程序,然后选择最适合您的格式。