/ etc / init /和/etc/init.d/有什么区别?
/etc/init/
和/etc/init.d/
什么区别?
更一般地说, .d
后缀对目录有什么意义?
/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
。 从清晰度来看,Ubuntu正在从SysVinit过渡到Upstart,这解释了为什么许多服务都带有SysVinit脚本,即使Upstart配置文件是首选。 实际上,SysVinit脚本由Upstart中的兼容层处理。
目录名称中的.d
通常表示包含许多配置文件或特定情况的脚本的目录(例如/etc/apt/sources.list.d
包含连接成虚拟sources.list
; /etc/network/if-up.d
包含在激活网络时执行的脚本。 当目录中的每个条目由不同的源提供时,通常使用此结构,以便每个包都可以存放自己的插件,而无需解析单个配置文件以引用自身。 在这种情况下,恰好“init”是目录的逻辑名称,SysVinit首先出现并使用init.d
,而Upstart使用普通init
用于具有类似目的的目录(它本来是更“主流”,如果他们使用/etc/upstart.d
而且可能不那么傲慢。
¹ 不算initrd
“.d”通常附加到目录名称,以指示由于方便起见,单个脚本或单个配置文件处理过的(或可能已经存在的)已被拆分为多个文件,但是应该包括在一起或执行。
例如,/ /etc/apache/conf.d/
/ /etc/apt/sources.d/
/etc/apache/conf.d/
或/etc/apt/sources.d/
如果重要的是它们应该被包含/执行的顺序,这些目录中的文件有时以数字开头,例如“00-default”或“80-user”,以便它们以正确的顺序执行。
在/etc/init.d/
的情况下,它表示“init.d”中的脚本都应该被执行。 然而,现在,现代操作系统的init系统比这更复杂,但目录名仍然存在。
正如你所指出的那样,“。d”命名法令人费解和奇怪,在任何现代系统中都没有任何地方 – 你会注意到大多数现代服务都倾向于放弃它。
目录是/etc/init
而不是/etc/upstart
的原因是因为Upstart是项目名称,实际安装的二进制文件仍然是/sbin/init
因此它的配置有一个名称不是没有意义匹配二进制文件。