我知道许多名称带有.d的目录:
init.d
yum.repos.d
conf.d
是目录吗?如果是,这从何而来?
更新:我对.d
方法的含义有很多有趣的答案,但是我的问题的标题选择不当。我将“平均”更改为“代表”。
.d
在中init.d
,但是似乎几乎所有自定义配置文件都.d
位于RHEL / CentOS / Fedora中的目录中。
我知道许多名称带有.d的目录:
init.d
yum.repos.d
conf.d
是目录吗?如果是,这从何而来?
更新:我对.d
方法的含义有很多有趣的答案,但是我的问题的标题选择不当。我将“平均”更改为“代表”。
.d
在中init.d
,但是似乎几乎所有自定义配置文件都.d
位于RHEL / CentOS / Fedora中的目录中。
Answers:
在.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
同样,这里的目标是避免名称冲突,而不是在可执行文件和配置文件之间,而不是在以前的整体配置文件和包含它们的目录之间发生名称冲突。
ls
命令(而非ls -al
)时,使用“ .d”可使目录从列表中脱颖而出。这就是为什么我一直认为这样做已经完成的原因。--color
LS_OPTIONS
color
不是唯一或最好的视觉标记目录的方法。ls -F
将会做到这一点以及更多有用的事情。
摘自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”的原因,我最好的猜测是“分布式的”,因为它不是主要配置文件的一部分,而是仍然是配置的一部分。
.d
意味着其他一切都超出了我!但是该资源仅显示了Debian在某种情况下使用Unix早期以来存在的约定的理由。我想知道这个Debian维护者是否故意简化-还是真的以为Debian发明了这种做法。
如果您在目录名称的末尾谈论“ .d”,则此答案是正确的,它只是“目录”的标记。
只是不要将其与文件名和上的“ d”混淆,例如“ syslogd”代表daemon。在后台运行的计算机进程。
守护程序的父进程通常是(但并非总是)初始化进程(PID = 1)。进程通常通过派生一个子进程然后立即退出其父进程而成为守护程序,从而导致init采纳该子进程。这是该过程的某种简化视图,因为通常会执行其他操作,例如将守护进程与任何控制tty分离。为此,在某些UNIX系统中存在诸如daemon(3)之类的便利例程。
syslogd
,不是以“ .d”结尾的目录。我会尽快编辑。
sysctl.d
,modprobe.d
..会是这样一个不恰当的使用?
这并不意味着目录本身,基本上发生的是,以结尾的目录.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
文件夹(包括配置摘要)进入正在运行的程序。
希望它能为您解释。
就像文件必须.ext
指定文件的类型(通常称为“扩展名”)一样,目录有时也.d
必须显示它是目录而不是文件。这就是它的类型。默认ls
输出不会在视觉上区分目录和文件,因此这.d
只是一个古老的约定,可以在此类清单中显示其类型(目录)。
.d
后缀可防止与名称相似的文件发生冲突。例如,您可以具有一个配置文件/etc/apt/sources.list
和一个配置文件目录/etc/apt/sources.list.d
。
更一般而言,.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中的文件。
我认为但不能证明该文件.d
指示该目录与d aemon 关联。
有证据表明这至少是合理的:
sudo find / -maxdepth 3 -name "*.d"
在古代Unix历史的一小部分深处的凹处中,仍然在蜘蛛网后面的我脑海中回荡,这呼唤我作为正确的答案。我相信这可能是在恐龙开始灭绝之前,第一批哺乳动物在地球上漫游的时候,而且man
页面不仅保留在系统上,而且还保存在用脚测量的架子上。
</cobwebs>
我认为,表明的目的.d
是从相关文件和类似名称的文件中消除目录歧义的答案是正确的。我已经投票支持E-man和jlliagre。
yum
是较新的发明。
.d
,请参阅Ask Ubuntu上msw对此相关问题的评论。