it-swarm.cn

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

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

init.d
yum.repos.d
conf.d

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

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

123
greg0ire

.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

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

108
jlliagre

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

58
E-man

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

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

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

12
Philomath

这并不意味着目录本身,基本上发生的是,以.d结尾的目录(请注意,这些目录通常只在/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文件夹(包括配置摘要)遍历到正在运行的程序中。

希望它能为您解释。

4
N J

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

3
Keith

更一般而言,.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中的文件。

2
Tim

我认为但无法证明.d表示目录与 daemon。

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

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

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

1