前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >浅谈配置文件格式

浅谈配置文件格式

作者头像
用户8639654
修改于 2021-10-11 02:42:19
修改于 2021-10-11 02:42:19
79000
代码可运行
举报
文章被收录于专栏:云计算运维云计算运维
运行总次数:0
代码可运行

计算机上有数以千计的配置文件。你可能永远不会直接与其中的大部分文件打交道,但它们确实散落在你的 /etc 以及 ~/.config~/.local/usr 文件夹中。还有一些可能在 /var,甚至 /opt 文件夹中。如果无意中打开过或更改过它们,你就可能会有疑问:为什么有些配置文件看起来是某一种格式,而另一些则是看起来完全不同的格式?

存储配置是一项很灵活的任务,因为只要开发人员知道他们的代码是如何将数据存入文件的,他们就可以轻松编写代码来根据需要提取数据。然而,科技行业非常青睐有详细文档的标准化事物,因此多年来出现了几种比较普遍的格式用来简化配置任务。

为什么我们需要配置文件

配置文件对于现代计算来说很重要。它们使你能够自定义与应用程序交互的方式,或自定义应用程序与系统内其他程序的交互方式。有了配置文件,每当你启动某个应用程序时,它都会有“记忆”,记录了你喜欢如何去使用该程序。

配置文件的结构可以很简单,而且通常确实也很简单。例如,如果你要编写一个应用程序,程序唯一需要知道的是其用户的偏好名字,那么它的唯一配置文件就可以只包含一个词:用户名。就像下面这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Tux

但通常应用程序需要追踪的不仅仅是一条信息,因此配置文件通常会有一个键和一个值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NAME='Tux'
SPECIES='Penguin'

即使没有编程经验,你也可以想象出代码如何解析这些数据。这里有两个简单的例子,一个使用 awk 命令,另一个使用 grep 命令。两个例子都是只关注包含 NAME “键”的行,并返回出现在等号 (=) 之后的“值”:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ awk -F'=' '/NAME/ { print $2; }' myconfig.ini
'Tux'
$ grep NAME fake.txt | cut -d'=' -f2
'Tux'

同样的原则适用于任何编程语言和任何配置文件。只要你有统一的数据结构,就可以在需要的时候编写简单的代码来提取和解析它。

选择格式

为了保证普遍有效性,配置文件最重要的一点是它们是一致的和可预测的。你绝对不会想做这样的事:以保存用户首选项的名义,将信息随意存储到文件中,然后花好几天时间逆向工程,来找到最终出现在文件中的随机信息。

流行的配置文件格式有若干种,每种格式都有自己的优势。

INI

INI 文件采用了键值对的格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[example]
name=Tux
style=widgety,fidgety
enabled=1

这种简单的配置风格很直观,只要你别选择使用糟糕的键名(比如用 unampref 这样的神秘键名来代替 name)就好。这些键值对很容易解析和编辑。

除了键和值之外,INI 格式还可以分 节(section)。在下列示例代码中,[example][demo] 就是配置文件中的两个节:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[example]
name=Tux
style=widgety,fidgety
enabled=1

[demo]
name=Beastie
fullscreen=1

这几个配置语句解析起来有点复杂,因为有两个 name 键。想象一下,一个粗心的程序员在这个配置文件中查询 name,结果总是返回 Beastie,因为这是文件中对 name 的最后一个定义值。在解析这样的文件时,开发人员必须加倍小心地在各节中搜索键,这可能会很棘手,具体取决于用来解析该文件的语言。然而,它仍然是一种很流行的格式,大多数语言都会有一个现成的库来帮助程序员解析 INI 文件。

YAML

YAML 文件 是结构化列表,可以包含值或者键值对:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
Example:
  Name: 'Tux'
  Style:
   - 'widgety'
    - 'fidgety'
  Enabled: 1

YAML 格式很流行,部分原因是它看起来很整洁。数据要放置到相对其上层数据的特定位置,除此之外没有太多其他语法。然而,对于某些人来说的这种特色,在其他人眼中可能就是一个问题。许多开发人员不愿使用 YAML,正是因为它很看重本质上 不存在 的东西。如果你在 YAML 中缩进错误,YAML 解析器可能会将你的文件视为无效文件,即使不视为无效,返回的数据也可能是错误的。

大多数语言都有 YAML 解析器,并且有很好的开源 YAML linters(验证语法的应用程序)来帮你确保 YAML 文件的完整性。

JSON

JSON 文件在技术上来说是 YAML 的子集,因此其数据结构是相同的,尽管其语法完全不同:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "Example": {
    "Name": [
      "Tux"
    ],
    "Style": [
      "widgety",
      "fidgety"
    ],
    "Enabled": 1
  }
}

JSON 在 JavaScript 程序员中很流行,这并不奇怪,因为 JSON 全称为 JavaScript 对象符号(JavaScript Object Notation)。由于与 Web 开发密切相关,JSON 是 Web API 的常见输出格式。大多数编程语言都有解析 JSON 的库。

XML

XML 使用标签作为键,将配置值围绕起来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<example>
  <name>Tux</name>
  <style priority="user">widgety</style>
  <style priority="fallback">fidgety</style>
  <enabled>1</enabled>
</example>

XML 经常被 Java 程序员使用,Java 有一套丰富的 XML 解析器。虽然 XML 以非常严格而著称,但同时也非常灵活。与有一系列特定标签的 HTML 不同,XML 中可以随意发明自己的标签。只要始终坚持相同的构建规则,并有一个良好的库来解析它,你就可以准确而轻松地提取数据。

有一些很好的开源 linter 可以帮你验证 XML 文件,并且大多数编程语言都提供用于解析 XML 的库。

二进制格式

Linux 以纯文本配置为傲。这样做的优点是可以使用 cat 等基本工具查看配置数据,甚至可以使用你 最喜欢的文本编辑器 来编辑配置。

但是,某些应用程序使用二进制格式配置,就意味着数据以某种非自然语言的格式进行编码。这些文件通常需要一个特殊的应用程序(通常是它们要配置的应用程序)来解释它们的数据。你无法查看这些文件,至少无法以任何有意义的方式查看,并且无法在其宿主应用程序之外编辑它们。选用二进制格式的一些原因如下:

  • 速度: 程序员可以使用自定义符号在二进制配置文件中的某些点注册特定的信息位。提取数据时不涉及搜索,因为所有内容都已标注了索引。
  • 大小: 文本文件可能会变大,如果选择压缩文本文件,实际上是在将其转换为二进制格式。二进制文件可以通过编码技巧变得更小(文本文件也是如此,但在某些时候,你的优化会使数据变得晦涩,以至于文件也成了二进制文件)。
  • 晦涩: 一些程序员甚至不希望人们查看他们的配置文件,因此将它们编码为二进制数据。这通常只会让用户感到沮丧,并不是使用二进制格式的好理由。

如果必须使用二进制格式进行配置,请使用已作为开放标准存在的格式,例如 NetCDF

找到有效的配置格式

配置格式帮助开发人员存储应用程序所需的数据,并帮助用户存储他们希望应用程序如何操作的偏好项。对于应该使用什么格式的问题,可能没有错误的答案,只要你觉得所使用的语言能很好地支持就可以。在开发应用程序时,查看可用格式,用一些样例数据建模,查看和评估你的编程语言提供的库和实用程序,然后选择你觉得最合适的一种格式吧。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
比较TOML、INI和YAML文件格式,TOML胜出?
TOML,全称为Tom's Obvious, Minimal Language,是一种配置文件格式,由Tom Preston-Werner在2013年创建。它旨在成为一种易于阅读、易于编写的配置文件格式,并且可以被容易地解析成多种编程语言的数据结构。TOML注重简洁性,同时提供了足够的表达能力来处理复杂的数据结构。
DevOps持续交付
2024/04/30
4.6K0
比较TOML、INI和YAML文件格式,TOML胜出?
什么?Figma 的 fig 文件格式居然解析出来了
上周图形编辑器交流群里有人问,对于 Figma 导出的 fig 文件,该如何解析其格式,拿到可读数据。
前端西瓜哥
2023/12/19
1.7K0
什么?Figma 的 fig 文件格式居然解析出来了
TOML语言配置文件入门
最近在配置算子的时候,一直用着一种配置文件,而且有着自己奇奇怪怪的语法,起初没想多以为是公司自己独创的语言。后来经提醒发现是TOML语言,由于没怎么做过开发,之前从来没听说过这个语言,趁此机会了解学习一下。
Mirza Zhao
2023/10/26
2.1K2
常见配置文件介绍
环境变量是操作系统和shells里面的一项功能。使用环境变量的话需要在运行程序之前将需要的变量提前设置好。
杜金房
2024/04/18
2730
常见配置文件介绍
配置文件格式 TOML 快速上手
GitHub 联合创始人 Tom Preston-Werner 觉得 YAML 不够简洁优雅,如缩进要严格对齐,因此和其他几位开发者一起捣鼓了一个 TOML(Tom’s Obvious Minimal Language)。
恋喵大鲤鱼
2024/04/20
1.2K0
Python 配置文件 yaml 用法详解
YAML是一种直观的能够被电脑识别的的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互。YAML类似于XML,但是语法比XML简单得多,对于转化成数组或可以hash的数据时是很简单有效的。
用户8949263
2022/04/08
1K0
程序常用配置文件格式介绍
不管是移动应用、桌面程序还是后台服务,经常需要从配置文件中读取配置信息,进行程序初始化和改变运行时的状态。以什么要的格式来存储配置信息,这是开发人员需要面临的一个问题。常用的配置文件格式主要有:
恋喵大鲤鱼
2022/05/09
3.4K0
程序常用配置文件格式介绍
INI配置文件格式详解与实战指南
本文深入解析INI配置文件的格式规范,涵盖基本语法、段落结构、转义机制等核心要素,并提供Python/Go/Node.js等多语言解析方案。通过实际案例演示INI文件的编写技巧,帮助开发者快速掌握这一经典配置格式的应用。
奶油话梅糖
2025/04/30
3220
Python常用配置文件ini、json、yaml读写总结
ini 即 Initialize ,是Windows中常用的配置文件格式,结构比较简单,主要由节(Section)、键(key)和值(value)组成。每个独立部分称之为section,每个section内,都是key(option)=value形成的键值对。
吾非同
2020/12/17
2.5K0
如何读取yaml,json,ini等配置文件【Golang 入门系列九】
本文转载自如何读取yaml,json,ini等配置文件【Golang 入门系列九】 前面已经讲过一些Go语言的基础知识,感兴趣的朋友可以先看看之前的文章。https://www.cnblogs.com/zhangweizhong/category/1275863.html。
ccf19881030
2021/01/04
2.4K0
配置文件的选择_Cisco备份配置文件
file 对象方法 f.read([size]):size 未指定则返回整个文件,如果文件大小 >2 倍内存则有问题,f.read()将整个文件内容作为一个字符串,读到文件尾时返回””(空字串)。 f.readline():返回一行。 f.readlines([size]) :返回包含size行的列表, size 未指定则返回全部行。 for line in f: print line :通过迭代器访问。
全栈程序员站长
2022/09/20
1.4K0
(56) 文件概述 / 计算机程序的思维逻辑
我们在日常电脑操作中,接触和处理最多的,除了上网,大概就是各种各样的文件了,从本节开始,我们就来探讨文件处理,本节主要介绍文件有关的一些基本概念和常识,Java中处理文件的基本思路和类结构,以及接来下章节的安排思路。 基本概念和常识 二进制思维 为了透彻理解文件,我们首先要有一个二进制思维。所有文件,不论是可执行文件、图片文件、视频文件、Word文件、压缩文件、txt文件,都没什么可神秘的,它们都是以0和1的二进制形式保存的。我们所看到的图片、视频、文本,都是应用程序对这些二进制的解析结果。 作为程序员,我
swiftma
2018/01/31
1.1K0
(56) 文件概述 / 计算机程序的思维逻辑
后端返回给前端的数据格式有哪些?
后端返回的数据格式有很多种,常见的包括JSON、XML、HTML、CSV等。这些格式各有特点,适用于不同的应用场景。
程序媛夏天
2024/02/05
6270
如何读取yaml,json,ini等配置文件【Golang 入门系列九】
前面已经讲过一些Go语言的基础知识,感兴趣的朋友可以先看看之前的文章。https://www.cnblogs.com/zhangweizhong/category/1275863.html。
章为忠学架构
2019/07/25
5.6K0
为什么推荐在 .NET 中使用 YAML 配置文件
在 .NET 开发中,虽然 JSON 是默认的配置文件格式,但 YAML("YAML Ain't Markup Language")正越来越受到开发者的青睐。
郑子铭
2025/02/18
1550
为什么推荐在 .NET 中使用 YAML 配置文件
SpringBoot基础(二):配置文件详解
Java微观世界
2025/01/21
2380
SpringBoot基础(二):配置文件详解
Python数据分析-数据加载、存储与文件格式
数据输入输出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据,利用Web API操作网络资源。
嵌入式视觉
2022/09/05
1K0
Python数据分析-数据加载、存储与文件格式
编码与模式------《Designing Data-Intensive Applications》读书笔记5
1、在内存中,数据是保存在对象、结构、列表、数组、哈希表、树、等等。这些数据结构在内存之中被优化为CPU可以高效访问和操作的结构(通常这是操作系统的任务,并不需要程序员操心)。
HappenLee
2018/09/05
1.5K0
编码与模式------《Designing Data-Intensive Applications》读书笔记5
netty系列之:netty中的核心解码器json
程序和程序之间的数据传输方式有很多,可以通过二进制协议来传输,比较流行的像是thrift协议或者google的protobuf。这些二进制协议可以实现数据的有效传输,并且通过二进制的形式可以节省数据的体积,在某些速度和效率优先的情况下是非常有效的。并且如果不同的编程语言之间的相互调用,也可以通过这种二进制的协议来实现。
程序那些事
2022/04/26
1.6K0
5 分钟掌握 Python 中常见的配置文件
在开发过程中,我们常常会用到一些固定参数或者是常量。对于这些较为固定且常用到的部分,往往会将其写到一个固定文件中,避免在不同的模块代码中重复出现从而保持核心代码整洁。
python学习教程
2020/12/16
8930
5 分钟掌握 Python 中常见的配置文件
推荐阅读
相关推荐
比较TOML、INI和YAML文件格式,TOML胜出?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验