问题描述
/etc/init/
和/etc/init.d/
有什么区别?
更一般地说,.d
后缀传递给目录有什么意义?
最佳解决办法
/etc/init.d
包含System V init工具(SysVinit)使用的脚本。这是Linux的传统服务管理软件包,包含init
程序(内核完成初始化时运行的第一个进程)以及一些基础设施,用于启动和停止服务并对其进行配置。特别是,/etc/init.d
中的文件是响应start
,stop
,restart
和(如果支持)reload
命令来管理特定服务的shell脚本。这些脚本可以通过其他触发器(通常是/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
包含激活网络接口时执行的脚本)。当目录中的每个条目由不同的源提供时,通常使用此结构,以便每个包可以存放其自己的plug-in,而不必解析单个配置文件以引用它自己。在这种情况下,恰好“init”是该目录的逻辑名称,SysVinit最先出现并使用init.d
,而Upstart使用普通init
作为具有相似目的的目录(它本可以是更多“mainstream”,并且可能不那么傲慢,如果他们使用了/etc/upstart.d
)。
¹不计入initrd
次佳解决办法
“.d”通常附加到一个目录名称,以表明为了方便起见,以前为单个脚本或单个配置文件处理过的内容(或本来可能已被分割为多个文件),但应包含,或一起执行。
例如,/etc/apache/conf.d/
或/etc/apt/sources.d/
如果重要的是它们应该包含/执行的顺序,那么这些目录中的文件有时以”00-default”或”80-user”等数字开头,以便它们按正确的顺序执行。
在/etc/init.d/
的情况下,它表明”init.d”中的脚本都应该被执行。但是,现在,现代操作系统的初始系统比这个更复杂一些,但目录名仍然存在。
第三种解决办法
正如你指出的那样,”.d”命名法令人困惑和奇怪,在任何现代系统中都没有任何地方 – 你会注意到大多数现代服务都倾向于放弃它。
目录是/etc/init
而不是/etc/upstart
的原因是因为Upstart是项目名称,实际安装的二进制文件仍然是/sbin/init
,因此它的配置名称与二进制文件不匹配是没有意义的。