我知道许多目录名称中都带有 .d:
init.d
yum.repos.d
conf.d
是目录的意思吗?如果是,这可以消除什么歧义?
更新:关于其含义,我有很多有趣的答案.d
,但我的问题标题选择得不好。我把“意思”改为“代表”。
答案1
这里的后缀.d
表示目录。当然,这是不必要的,因为 Unix 不需要后缀来表示文件类型,但在这种特定情况下,需要采取一些措施来消除命令(/etc/init
、/etc/rc0
等/etc/rc1
)及其使用的目录(/etc/init.d
、/etc/rc0.d
、/etc/rc1.d
、 . ..)
这个约定至少是在 Unix System V 中引入的,但可能更早。该init
命令过去位于现代 System V 操作系统中,/etc
但现在通常位于其中。/sbin
请注意,许多应用程序已采用此约定,从单个文件配置文件转移到位于单个目录中的多个配置文件,例如:/etc/sudoers.d
同样,我们的目标是避免名称冲突,不是在可执行文件和配置文件之间,而是在以前的整体配置文件和包含它们的目录之间。
答案2
摘录自Debian 邮件列表(强调):
当分发包变得越来越普遍时,很明显我们需要更好的方法来从多个片段中形成此类配置文件,这些片段通常由多个独立的包提供。每个需要配置某些共享服务的包应该能够仅管理其配置,而不必编辑其他包使用的共享配置文件。
最常见的约定是允许包含一个充满配置文件的目录,其中任何放入该目录的内容都将变为活动状态并成为该配置的一部分。随着该约定变得越来越普遍,该目录通常以其要替换或增强的配置文件来命名。但由于目录和文件不能同名,需要通过某种方法来区分,所以在配置文件名的末尾添加了.d。因此,配置文件 /etc/Muttrc 被 /etc/Muttrc.d 中的片段增强,/etc/bash_completion 被 /etc/bash_completion.d/* 增强,等等。有时会使用该约定的轻微变化,例如 /etc/xinetd.d 来补充 /etc/xinetd.conf,或 /etc/apache2/conf.d 来补充 /etc/apache2/apache2.conf。但这是相同的基本想法。
一般来说,当您看到 *.d 约定时,它意味着“这是一个包含一堆配置片段的目录,这些片段将合并到某些服务的配置中。”
对于第 2 部分,“.d”的原因,我最好的猜测是“分布式”,如不是主配置文件的一部分,但仍然是配置的一部分。
答案3
答案4
更一般地说,.d 目录(/etc/httpd/conf.d、/etc/rc.d、/etc/being another example)表示将读取和使用包含的文件,通常用于配置(如果它们匹配)给定的模式,不需要显式添加到某个主列表中。
因此,如果您将 *.repo 形式的文件添加到 /etc/yum.repos.d,yum 将在运行时使用它,而无需将其添加到配置列表 /etc/yum.conf。如果将 *.conf 形式的文件添加到 /etc/http/conf.d,Apache 将读取它们,而无需显式添加到 /etc/httpd/conf/httpd.conf。同样,chkconfig 到 /etc/init.d 中的文件,cron 作业在 /etc/cron.d 中。