/etc/init/
和有什么区别/etc/init.d/
?
更一般地说,.d
后缀向目录传达了什么含义?
答案1
/etc/init.d
包含 System V init 工具 (SysVinit) 使用的脚本。这是 Linux 的传统服务管理包,包含程序init
(内核完成初始化后运行的第一个进程¹)以及一些用于启动和停止服务并配置服务的基础结构。具体来说, 中的文件/etc/init.d
是 shell 脚本,它们响应start
、stop
、restart
和(如果支持)reload
命令来管理特定服务。这些脚本可以直接调用,或者(最常见的)通过其他触发器调用(通常是 中的符号链接/etc/rc?.d/
)。
/etc/init
包含 Upstart 使用的配置文件。Upstart 是 Ubuntu 倡导的一款新服务管理包。 中的文件/etc/init
是配置文件,用于告诉 Upstart 如何以及何时start
、stop
、reload
配置或查询status
服务的 。截至 lucid,Ubuntu 正在从 SysVinit 过渡到 Upstart,这解释了为什么许多服务都附带 SysVinit 脚本,尽管 Upstart 配置文件更受欢迎。事实上,SysVinit 脚本由 Upstart 中的兼容层处理。
.d
目录名称通常表示包含许多配置文件或特定情况的脚本的目录(例如,/etc/apt/sources.list.d
包含连接在一起以构成虚拟的文件sources.list
;/etc/network/if-up.d
包含在网络我内特Face 已激活)。此结构通常在目录中的每个条目由不同的源提供时使用,这样每个包都可以存放自己的插件,而不必解析单个配置文件来引用自身。在这种情况下,“init”恰好是目录的逻辑名称,SysVinit 先出现并使用init.d
,而 Upstart 则使用 plaininit
作为具有类似用途的目录(如果他们改用,它会更“主流”,也许不那么傲慢/etc/upstart.d
)。
¹不包括 initrd
答案2
“.d” 通常附加在目录名中,表示过去由(或本来可以由)单个脚本或单个配置文件处理的内容为了方便起见已被拆分为多个文件,但应该一起包含或执行。
例如,/etc/apache/conf.d/
或/etc/apt/sources.d/
在包含/执行它们的顺序很重要的情况下,这些目录中的文件有时以数字开头,例如“00-default”或“80-user”,以便它们按正确的顺序执行。
在这种情况下,/etc/init.d/
它表示应该执行“init.d”中的所有脚本。然而,如今现代操作系统的 init 系统比这更复杂一些,但目录名称仍然存在。
答案3
正如您所指出的,“.d”命名法令人费解且奇怪,并且在任何现代系统中实际上都没有位置——您会注意到大多数现代服务都倾向于放弃它。
目录是/etc/init
而不是的原因/etc/upstart
是因为 Upstart 是项目名称,而实际安装的二进制文件仍然是,/sbin/init
因此其配置名称与二进制文件不匹配是没有意义的。