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


118

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

init.d
yum.repos.d
conf.d

是目录吗?如果是,这从何而来?

更新:我对.d方法的含义有很多有趣的答案,但是我的问题的标题选择不当。我将“平均”更改为“代表”。


9
有关其起源.d,请参阅Ask Ubuntumsw对此相关问题的评论。
吉尔斯(Gilles)2010年

@Gilles,哈,我当时以为它晚于System-V,但是,是的,即使'.d'仍然没有意义,它只是从我的判断中选择的。
新泽西州2010年

@Gilles:有趣,答案似乎是:解释丢失了……根据您链接中第一个答案的第一条评论
greg0ire 2010年

不确定为什么.d在中init.d,但是似乎几乎所有自定义配置文件都.d位于RHEL / CentOS / Fedora中的目录中。
刘岩刘研

@Liu Yan-的确,我无法以任何可以解释为一致的方式对其进行解释。
蒂姆·波斯特

Answers:


102

.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 OS上。

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

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


4
+1,我认为您是对的,但到目前为止,还没有人提供有关他的理论的报价
greg0ire 2010年

我认为,这实际上是一种在人们身上发展的惯例,而不是一种实际的明确标准
Shadur

1
在不使用选项(显式指定或环境变量的一部分)的情况下执行ls命令(而非ls -al)时,使用“ .d”可使目录从列表中脱颖而出。这就是为什么我一直认为这样做已经完成的原因。--colorLS_OPTIONS
LawrenceC

^ color不是唯一或最好的视觉标记目录的方法。ls -F将会做到这一点以及更多有用的事情。
underscore_d 2015年

56

摘自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
令人惊讶的是...我会以为它赞成“目录”,即“这是配置的目录部分”。
greg0ire

2
显然可以。为什么有人会读到这并得出结论,.d意味着其他一切都超出了我!但是该资源仅显示了Debian在某种情况下使用Unix早期以来存在的约定的理由。我想知道这个Debian维护者是否故意简化-还是真的以为Debian发明了这种做法。
underscore_d

11

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

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

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


不完全是,这些是目录名。
基思

@Keith:哎呀,我误以为他说的是以“ d”结尾的文件,例如syslogd,不是以“ .d”结尾的目录。我会尽快编辑。
Philomath

这就是我想,但我看到它经常被用来在配置目录对于程序守护进程,例如sysctl.dmodprobe.d..会是这样一个不恰当的使用?
蒂姆·波斯特

@Tim Post:请参阅以上2条评论(以及Keith的答案),我将尽快编辑我的答案。
Philomath

编辑(15 chr)
Philomath

4

这并不意味着目录本身,基本上发生的是,以结尾的目录.d(请注意,这些目录通常只在in中/etc)包含配置部分。

这样做是为了使发行版可以在其中包含通用默认值,例如/etc/yum.conf,然后有一种易于使用的方法,用户或其他软件包可以安全地附加自己的yum配置,而不会被覆盖。

以百胜为例...

如果我想在RHEL5或CentOS Box上开始使用EPEL,则可以在/etc/yum.repos.d文件夹中配置新的存储库(例如/etc/yum.repos.d/epel.repo),或安装自动创建文件的epel-release软件包,而无需修改我的默认配置或引起文件冲突。不需要发生。

将会发生的情况是,大多数程序将读取其默认配置(/etc/yum.conf例如),然后遍历其.d文件夹(包括配置摘要)进入正在运行的程序。

希望它能为您解释。


+1,这说明了很多问题,但是...不能选择'd'字母。
greg0ire

1
选择是否需要解释?它只是随着时间的推移而发展起来的一种约定,FHS中没有(从快速的角度)定义它,但是它可能已包含在LSB标准中。我记得Cron是最早的人之一。(编辑:实际上,它本来应该是init)
新泽西州2010年

3

就像文件必须.ext指定文件的类型(通常称为“扩展名”)一样,目录有时也.d必须显示它是目录而不是文件。这就是它的类型。默认ls输出不会在视觉上区分目录和文件,因此这.d只是一个古老的约定,可以在此类清单中显示其类型(目录)。


6
此外,.d后缀可防止与名称相似的文件发生冲突。例如,您可以具有一个配置文件/etc/apt/sources.list和一个配置文件目录/etc/apt/sources.list.d
2011年

2
^我什至可以说这不是“加法”,而首先是约定的原因。Unix / Linux从来都不是必须包含事物扩展的宝贵资源,尤其是在早期,所以我怀疑这一扩展没有充分的理由。
underscore_d

2

更一般而言,.d目录(/etc/httpd/conf.d、/etc/rc.d、/etc/是另一个示例)指示如果包含的文件匹配,则将读取并使用它们,通常用于配置给定模式,不需要显式添加到某些主列表。

因此,如果将格式为* .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中的文件。


+1,但...与上述相同。
greg0ire

1
@greg:由于对答案进行排序的方式多种多样,“上方”和“下方”是引用(评论)其他答案的差劲方法。对于此类基于位置的描述,“最旧”和“最新”排序产生相反的含义,当按“投票”排序时,两个答案的相对位置可能会随时间变化。
克里斯·约翰森

@克里斯约翰森:这就是我意识到的,但为时已晚。我指的是对新泽西州答案的评论。
greg0ire

1

我认为但不能证明该文件.d指示该目录与d aemon 关联。

有证据表明这至少是合理的:

sudo find / -maxdepth 3 -name "*.d"

在古代Unix历史的一小部分深处的凹处中,仍然在蜘蛛网后面的我脑海中回荡,这呼唤我作为正确的答案。我相信这可能是在恐龙开始灭绝之前,第一批哺乳动物在地球上漫游的时候,而且man页面不仅保留在系统上,而且还保存在用脚测量的架子上。


最后为the妄

</cobwebs>我认为,表明的目的.d是从相关文件和类似名称的文件中消除目录歧义的答案是正确的。我已经投票支持E-man和jlliagre。
丹尼斯·威廉姆森

问题是“ .d”代表什么,我已经收到很多关于为什么存在“ .d”的解释,但是很少有人提供关于含义的答案。从个性上讲,我认为这意味着目录。
greg0ire

1
yum是较新的发明。
丹尼斯·威廉姆森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.