网易首页 > 网易号 > 正文 申请入驻

浅谈配置文件格式 | Linux 中国

0
分享至

导读:流行的配置文件格式有若干种,每种都有其自身优势。从中找到最适合你的格式吧!                 

本文字数:3886,阅读时长大约: 6分钟

https://linux.cn/article-13832-1.html
作者:Seth Kenlon
译者:unigeorge

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

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

为什么我们需要配置文件

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

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

  1. Tux

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

  1. NAME='Tux'

  2. SPECIES='Penguin'

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

  1. $ awk -F'=' '/NAME/ { print $2; }' myconfig.ini

  2. 'Tux'

  3. $ grep NAME fake.txt | cut -d'=' -f2

  4. 'Tux'

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

选择格式

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

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

INI

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

  1. [example]

  2. name=Tux

  3. style=widgety,fidgety

  4. enabled=1

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

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

  1. [example]

  2. name=Tux

  3. style=widgety,fidgety

  4. enabled=1

  5. [demo]

  6. name=Beastie

  7. fullscreen=1

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

YAML

www.redhat.com 是结构化列表,可以包含值或者键值对:

  1. ---

  2. Example:

  3. Name: 'Tux'

  4. Style:

  5. - 'widgety'

  6. - 'fidgety'

  7. Enabled: 1

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

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

JSON

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

  1. {

  2. "Example": {

  3. "Name": [

  4. "Tux"

  5. ],

  6. "Style": [

  7. "widgety",

  8. "fidgety"

  9. ],

  10. "Enabled": 1

  11. }

  12. }

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

XML

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

  1. Tux

  2. priority="user">widgety

  3. priority="fallback">fidgety

  4. 1

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

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

二进制格式

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

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

速度: 程序员可以使用自定义符号在二进制配置文件中的某些点注册特定的信息位。提取数据时不涉及搜索,因为所有内容都已标注了索引。

大小: 文本文件可能会变大,如果选择压缩文本文件,实际上是在将其转换为二进制格式。二进制文件可以通过编码技巧变得更小(文本文件也是如此,但在某些时候,你的优化会使数据变得晦涩,以至于文件也成了二进制文件)。

晦涩: 一些程序员甚至不希望人们查看他们的配置文件,因此将它们编码为二进制数据。这通常只会让用户感到沮丧,并不是使用二进制格式的好理由。

如果必须使用二进制格式进行配置,请使用已作为开放标准存在的格式,例如 www.unidata.ucar.edu。

找到有效的配置格式

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

via:

作者: 选题: 译者: 校对:

本文由 原创编译, 荣誉推出

欢迎遵照 CC-BY-NC-SA 协议规定转载,

如需转载,请在文章下留言 “ 转载:公众号名称”,

我们将为您添加白名单,授权“ 转载文章时可以修改”。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
姜萍事件新消息:她初三的数学老师发声,让我们又看到了一些真相

姜萍事件新消息:她初三的数学老师发声,让我们又看到了一些真相

王晓爱体彩
2024-06-20 00:38:37
欧洲杯又乱了:4分未出线,0分却还活着!世界第16晋级,第10垫底

欧洲杯又乱了:4分未出线,0分却还活着!世界第16晋级,第10垫底

侃球熊弟
2024-06-20 04:54:02
复旦大学一学生在毕业典礼拳打老师,更多内幕曝光!

复旦大学一学生在毕业典礼拳打老师,更多内幕曝光!

兵叔评说
2024-06-19 23:09:30
突然决定退出独行侠!难了,欧文!整个NBA唯一支持者……

突然决定退出独行侠!难了,欧文!整个NBA唯一支持者……

篮球实战宝典
2024-06-19 14:56:49
1场2冤案!欧洲杯最大争议:VAR沉默,黑科技隐身,全队暴怒

1场2冤案!欧洲杯最大争议:VAR沉默,黑科技隐身,全队暴怒

叶青足球世界
2024-06-20 02:41:27
余琦被立案了!大3岁老公低调露面,同事曝光她一路高升的内幕

余琦被立案了!大3岁老公低调露面,同事曝光她一路高升的内幕

美美谈情感
2024-06-19 17:07:00
上游新闻探访姜萍老家:其家庭年收入中等,上中专不是缺学费,对口招生上本科几率更大

上游新闻探访姜萍老家:其家庭年收入中等,上中专不是缺学费,对口招生上本科几率更大

上游新闻
2024-06-19 19:12:22
证监会决心“壮士断腕”!6月20日,A股将打响3000点保卫战?

证监会决心“壮士断腕”!6月20日,A股将打响3000点保卫战?

风口招财猪
2024-06-20 02:47:41
李玟雕像武汉揭幕惹众怒,网友炮轰:她算老几,竟霸占英雄城地盘

李玟雕像武汉揭幕惹众怒,网友炮轰:她算老几,竟霸占英雄城地盘

皖声微言
2024-06-19 09:21:03
中国海警登船缴枪!咽不下这口气的菲律宾,转头找到了三座靠山

中国海警登船缴枪!咽不下这口气的菲律宾,转头找到了三座靠山

战域笔墨
2024-06-19 19:59:40
取消对华免签,还拒绝中国的高铁,甚至放言:“不欢迎中国人”!

取消对华免签,还拒绝中国的高铁,甚至放言:“不欢迎中国人”!

星辰故事屋
2024-06-18 10:54:05
现场直击|胖东来“爆改”的永辉超市亮相:下架单品逾1万,员工月薪涨千元

现场直击|胖东来“爆改”的永辉超市亮相:下架单品逾1万,员工月薪涨千元

第一财经资讯
2024-06-19 17:14:42
玉渊谭天:一场闭门会,业界提到更多对欧反制措施

玉渊谭天:一场闭门会,业界提到更多对欧反制措施

环球网资讯
2024-06-19 17:12:09
精壮了!前辽篮神射贺天举:4个月减了125斤 小小炫耀一下

精壮了!前辽篮神射贺天举:4个月减了125斤 小小炫耀一下

直播吧
2024-06-19 20:56:11
皇马震怒,干涉法国计划!不满姆巴佩推迟手术,勒令其连休2场!

皇马震怒,干涉法国计划!不满姆巴佩推迟手术,勒令其连休2场!

风过乡
2024-06-20 07:22:07
金正恩正式欢迎普京仪式超隆重!36岁妹妹穿红装美翻,李雪主没来

金正恩正式欢迎普京仪式超隆重!36岁妹妹穿红装美翻,李雪主没来

前沿天地
2024-06-19 23:04:05
北大硕士赵斌再次回应:姜萍老师王闰秋是推手,带考研辅导要流量

北大硕士赵斌再次回应:姜萍老师王闰秋是推手,带考研辅导要流量

育学笔谈
2024-06-19 16:50:01
岛内风向变了,连胜文返台后发出大胆言论,赖清德罕见对大陆喊话

岛内风向变了,连胜文返台后发出大胆言论,赖清德罕见对大陆喊话

好笑娱乐君每一天
2024-06-20 01:12:13
女子开使馆车叫嚣有豁免权后续:处理来了 工作恐难保 道歉遭群嘲

女子开使馆车叫嚣有豁免权后续:处理来了 工作恐难保 道歉遭群嘲

鋭娱之乐
2024-06-19 15:15:22
高盛:中国正在考虑进行全面的消费税改革

高盛:中国正在考虑进行全面的消费税改革

风向观察
2024-06-19 19:07:10
2024-06-20 08:20:49
Linux
Linux
Linux 中国开源社区
8016文章数 73124关注度
往期回顾 全部

科技要闻

美国AI圈震动! “OpenAI宫斗”核心人物苏茨克维官宣创业

头条要闻

美媒:真主党有十几万枚炮弹 或3天摧毁以基础设施

头条要闻

美媒:真主党有十几万枚炮弹 或3天摧毁以基础设施

体育要闻

欧洲杯最大的混子,非他莫属

娱乐要闻

黄一鸣“杀疯了” 直播间卖大葱养孩子

财经要闻

深化科创板改革 证监会发布八条措施

汽车要闻

双肾格栅变化大/内饰焕新 新一代宝马X3官图发布

态度原创

健康
手机
数码
艺术
军事航空

晚餐不吃or吃七分饱,哪种更减肥?

手机要闻

华为 Mate 60 系列手机获推鸿蒙 4.2.0.130

数码要闻

罗斯・杨称苹果今年第四季度推出 14/16 英寸 M4 MacBook Pro

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

军事要闻

以色列涉嫌在加沙使用重型炸弹 或多次违反战争法

无障碍浏览 进入关怀版