.d 在目录名称中代表什么?

gre*_*ire 149 fhs directory

我知道许多名称中带有 .d 的目录:

init.d
yum.repos.d
conf.d
Run Code Online (Sandbox Code Playgroud)

是目录的意思吗?如果是,这与什么消除歧义?

更新:关于这.d意味着什么,我有很多有趣的答案,但我的问题的标题没有选好。我把“意思”改为“代表”。

jll*_*gre 132

.d这里的后缀表示目录。当然,这将是不必要的,因为Unix的不需要后缀来表示文件类型,但在特定情况下,什么是需要区分(命令/etc/init/etc/rc0/etc/rc1等等),他们使用(目录/etc/init.d/etc/rc0.d/etc/rc1.d,。 ..)

这个约定至少是在 Unix System V 中引入的,但可能更早。该init命令曾经位于/etc但现在通常位于/sbin现代 System V 操作系统中。

请注意,此约定已被许多应用程序采用,从单个文件配置文件移动到位于单个目录中的多个配置文件,例如: /etc/sudoers.d

再次,目标是避免名称冲突,不是在可执行文件和配置文件之间,而是在以前的整体配置文件和包含它们的目录之间。

  • +1,我认为你是对的,但到目前为止还没有人引用他的理论 (4认同)

小智 64

摘自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”的原因,我最好的猜测是“分布式”,因为它不是主配置文件的一部分,但仍然是配置的一部分

  • 令人惊讶......我会认为这有利于“目录”,意思是“这是配置的目录部分”。 (8认同)
  • 很明显。为什么有人会读到这篇文章并得出结论:'.d' 意味着我无法理解的其他任何东西!但是这个来源只显示了 Debian 在一个上下文中使用自 Unix 早期就存在的约定的基本原理。我不得不怀疑这个 Debian 维护者是故意简化 - 还是真的认为 Debian 发明了这种做法。 (2认同)

Phi*_*ath 14

如果您在目录名称末尾谈论“.d”,则此答案是正确的,它只是“目录”的标记。

只是不要将它与文件名中的“d”混淆,例如“syslogd”,它代表daemon。在后台运行的计算机进程。

守护进程的父进程通常(但不总是)是 init 进程(PID=1)。进程通常通过 fork 一个子进程然后让它们的父进程立即退出而变成守护进程,从而导致 init 采用子进程。这是该进程的一个稍微简化的视图,因为通常会执行其他操作,例如将守护进程与任何控制 tty 分离。为此,某些 UNIX 系统中存在诸如 daemon(3) 之类的便利例程。