在 Linux 中,为什么配置文件的文件夹总是命名为*.d
?
说
/etc/init.d
/etc/grub.d
/etc/apparmor.d
答案1
代表.d
目录。这是区分基于目录的配置和基于单个配置文件的配置的惯例。通常,您会在某种程度上同时拥有这两种配置,例如/etc/logrotate.conf
和/etc/logrotate.d/
。
通常情况下,此类目录中的所有(合理命名的)文件都会自动合并为单个配置。然后,软件包可以将文件安装到这样的目录中,并自动使用它们。同样,/etc/logrotate.d/
是一个很好的例子。相比之下,不以 结尾的配置文件目录.d
可能只包含属于同一软件包的配置文件的随机排序,您无法推断出它们是如何处理的,例如/etc/zsh/
。
答案2
为了进一步解释彼得的回答,这个 .d 模式允许更简单地添加和删除配置文件:对于给定的 .d 程序,管理员可以简单地将文件复制或删除到 .d 目录中,而无需编辑现有的配置文件。
例如,如果您想在系统中添加一个 cron 作业,您可以使用您最喜欢的文本编辑器编辑 /etc/crontab,其中包含新的计划作业。这对于单个服务器或少数服务器来说没问题,但如果您在数据中心/云环境中工作,请尝试在 100 台服务器上执行此操作。在后一种情况下,您可以使用类似 sed 的临时文件或类似 ex 的工具来编写文件,但如果您没有正确编写命令,则存在一些风险。事实上,我曾看到配置文件由于这些编辑命令中的拼写错误而被完全删除。
现在将其与将包含计划作业的文件放入 /etc/cron.d 进行比较。您只需将文件复制到其中,下次 cron 运行时(通常每分钟一次),它将看到新文件并相应地获取/处理它。如果您喜欢使用自己的软件包,那么这很棒,正如 Peter 所说:/etc/cron.d 文件只是软件包存档中安装的另一个文件。删除软件包后,cron.d 文件将被删除,您的 cron 不再运行。
最后,每个具有 .d 目录的程序可能都有自己的文件来源实现,例如包含顺序和配置覆盖。因此,每当您决定将文件放在 .d 目录中时,请务必验证它是否按您的要求运行,不要只是假设它像其他具有 .d 目录的程序一样运行。