linux 平台文化点滴


linux 文件系统中的 XXX.d 文件夹

在 linux 文件系统中,经常会看到一种特殊的文件夹 — xxx.d 文件夹。尤其是在 /etc 目录中,经常看到某个文件夹中包含一个配置文件 xxx.conf 的同时,也包含一个配置文件同名的 xxx.d 文件夹,里面包含一系列配置文件。

xxx.d 文件夹是 linux 系统的一种惯例,也是一种优秀的设计,为碎片化文件管理与整合提供一套良好的机制。

现代软件系统(或服务)都是一种开放性设计,即除了软件系统(或服务)的核心功能外,可以通过添加额外软件包或组件的方式,进一步增强、完善软件系统(或服务)的功能,进而构建出更强大的功能生态。而软件系统功能往往由配置文件设定,增加额外软件包后,整个系统配置也要随之同步变更。一般而言,初始的软件系统的各种属性通过一个核心的配置文件定义,新增软件包以后,软件系统的属性也要进行对应的调整。

一种策略是在核心配置文件上直接修改,核心配置文件对各个软件包是一种共享资源,各个软件包将各种对应的配置写入核心配置文件。这种系统配置统一管理的方式比较直接,但对共享资源的使用也会带来诸多不便,例如,软件包删除后,将系统配置恢复到软件包增加前的状态就有一定困难。

另一种方式是,将系统配置分散化管理,即,在一个核心配置文件的基础上,所有额外软件包都独立管理自己的配置文件,这些独立的配置文件都是完整系统配置的一部分,这些片段(碎片)配置文件,通过一定的机制整合到一起,形成一个完整配置后对原有的核心配置文件进行替代增强。这种方式为系统配置管理提供了极大的灵活性,无需大动干戈,只需修改碎片化的小配置文件,即可实现对整个系统配置的调整完善。xxx.d 文件夹即是针对这一思想的具体实现。软件系统有初始配置文件,如 xxx,同时,设立配置文件夹 xxx.d,只要放入文件夹内的配置文件,都是有效配置文件并被整合为系统完整配置一部分,进而实现对 xxx 的增强。

/etc 是 linux 系统集中存放配置文件的地方,系统配置碎片化管理在这个文件夹里随处可见。配置文件和对应配置文件夹名称可能相同,也可能不同。

配置文件 碎片配置文件夹
/etc/Muttrc /etc/Muttrc.d/
/etc/bash_completion /etc/bash_completion.d/
/etc/xinetd.conf /etc/xinetd.d/
/etc/apache2/apache2.conf /etc/apache2/conf.d/
/etc/fonts/fonts.conf /etc/fonts/conf.d/

一般来说,看到 .d 文件夹,往往就意味着该文件夹包含一系列配置文件碎片,这些碎片将会被整合到一起为某个软件系统(或服务)提供对应的配置信息。

linux 系统配置的应用的基本规则

linux 系统中,系统的各种服务和能力,如系统服务、设备驱动等,都是基于配置文件进行管理的。随着系统服务的复杂以及设备能力的增强,系统配置文件也愈加复杂,往往出现一个服务或设备有多个配置文件与其对应的情况,此时,对配置文件进行合理调度管理是十分必要的。

配置文件优先级的管理

对于一个服务或设备有多个配置文件(或驱动)与其对应的情况,需要对配置文件的优先级进行设计,具体可以细分为两类问题,

  • 多个配置文件存放在同一个配置文件夹中

    需要设计专门的机制,明确各个文件的优先级。

    例如,在 /usr/share/X11/xorg.conf.d/ 设备驱动的配置文件夹中,使用文件名中的数字编号来表明配置文件的优先级;数字越大,优先级越高;针对统一设备的多个配置文件(驱动程序),优先级最高的配置文件作为最终的驱动程序。

    pic

    如上图,40-libinput.conf70-synaptics.conf 都对应着 touchpad 的驱动,因 70-synaptics.conf 优先级更高,所以系统采用 synaptics 的驱动。

  • 多个配置文件存在不同配置文件夹中

    在 linux 系统中,不同位置的配置文件夹,也定义了不同的配置文件调用优先级。系统服务和驱动安装后的默认配置文件往往存放于 /usr 文件夹中;而通常情况下,在 /etc 中往往存放各种定制的配置文件;在系统运行中,/etc 文件夹比 /usr 文件夹有着更高的调用优先级。

    例如,

    针对同一个设备的驱动程序使用,/etc/X11/xorg.conf.d/ 文件夹比 /usr/share/X11/xorg.conf.d/ 文件夹有更高的优先级;

    针对同一个系统服务的配置文件,/usr/lib/systemd/system/ –> /run/systemd/system/ –> /etc/systemd/system/ 文件夹的优先级也是依次升高的。

总而言之,同一服务或设备的配置文件优先级的判断,首先看文件夹之间的优先级;文件夹之间的优先级一致情况下,再看文件夹内部的优先级。

碎片化配置的管理

linux 系统通过碎片化的配置文件,为服务和设备进行能力增量,通过配置文件夹中的 xxx.d 子文件夹达成这个目标。

Reference

  1. https://unix.stackexchange.com/questions/4029/what-does-the-d-stand-for-in-directory-names
  2. https://superuser.com/questions/230247/in-linux-why-are-folders-for-configuration-files-always-named-d
  3. https://serverfault.com/questions/240181/what-does-the-suffix-d-mean-in-linux
  4. http://blog.siphos.be/2013/05/the-linux-d-approach/
  5. https://www.redhat.com/sysadmin/etc-configuration-directories

发表回复

您的电子邮箱地址不会被公开。