it-swarm.cn

/ etc / init /和/etc/init.d/有什么区别?

/etc/init//etc/init.d/有什么区别?

更一般地说,.d后缀对目录有何意义?

231
Olivier Lalonde

/etc/init.d包含System V init工具(SysVinit)使用的脚本。这是Linux的传统服务管理包,包含init程序(内核完成初始化时运行的第一个进程¹)以及启动和停止服务并配置它们的一些基础结构。具体来说,/etc/init.d中的文件是Shell脚本,它响应startstoprestart和(当受支持时)reload命令来管理特定服务。这些脚本可以直接调用(或最常见)通过其他触发器调用(通常在/etc/rc?.d/中存在符号链接)。

/etc/init包含Upstart使用的配置文件。 Upstart是Ubuntu倡导的年轻服务管理软件包。 /etc/init中的文件是配置文件,告诉Upstart如何以及何时startstopreload配置,或查询服务的status。截至清醒,Ubuntu正在从SysVinit过渡到Upstart,这解释了为什么许多服务都附带SysVinit脚本,即使首选配置文件是Upstart。实际上,SysVinit脚本由Upstart中的兼容层处理。

目录名中的.d通常表示包含许多配置文件或特定情况的脚本的目录(例如/etc/apt/sources.list.d包含连接成虚拟sources.list的文件; /etc/network/if-up.d包含在网络时执行的脚本i nter f ace被激活)。当目录中的每个条目由不同的源提供时,通常使用此结构,以便每个包可以存放自己的插件,而无需解析单个配置文件以引用自身。在这种情况下,恰好“init”是目录的逻辑名称,SysVinit首先使用init.d,Upstart使用plain init作为具有类似目的的目录(它可能更“主流”,也许如果他们使用/etc/upstart.d而不是傲慢的话。

¹ 不计算initrd

230
Gilles

“.d”通常附加到目录名称,以指示由于方便起见,单个脚本或单个配置文件处理过的(或可能已经存在的)已被拆分为多个文件,但是应该包括在一起或执行。

例如,/etc/Apache/conf.d//etc/apt/sources.d/

如果重要的是它们应该被包含/执行的顺序,这些目录中的文件有时以数字开头,例如“00-default”或“80-user”,以便它们以正确的顺序执行。

/etc/init.d/的情况下,它表示“init.d”中的脚本都应该被执行。然而,现在,现代操作系统的init系统比这更复杂,但目录名仍然存在。

29
thomasrutter

正如你所指出的那样,“。d”命名法令人费解和奇怪,并且在任何现代系统中都没有任何地方 - 你会注意到大多数现代服务都倾向于放弃它。

目录是/etc/init而不是/etc/upstart的原因是因为Upstart是项目名称,实际安装的二进制文件仍然是/sbin/init,因此它的配置的名称与二进制文件不匹配是没有意义的。

13
Scott