Linux 目录之 /etc/init.d/ 介绍

2023-12-21 15:10:09 2075

一、关于目录 /etc/init.d/

/etc/init.d/ 这个目录到底是干嘛的呢?

 

目录 /etc/init.d/ 中包含许多系统服务的启动和停止脚本。它控制着所有从 acpid 到 x11-common 的各种事务。当然,/etc/init.d/ 远远没有这么简单。

(译者注:acpid 是 Linux 操作系统新型电源管理标准 ;X11 也叫做 X Window 系统,X Window 系统 (X11 或 X)是一种位图显示的视窗系统。它是在 Unix 和类 Unix 操作系统以及 OpenVMS 上建立图形用户界面的标准工具包和协议,并可用于几乎已有的现代操作系统)。

 

当你查看 /etc 目录时,你会发现许多 rc#.d 形式存在的目录(这里#代表一个指定的初始化级别,范围是0~6)。在这些目录之下,包含了许多对进程进行控制的脚本。这些脚本要么以“K”开头,要么以“S”开头。以“K”开头的脚本运行在以“S”开头的脚本之前。这些脚本放置的地方,将决定这些脚本什么时候开始运行。有时候你希望能在不使用 kill 或 killall 命令的情况下,能干净的启动或杀死一个进程。这就是 /etc/init.d/ 能够派上用场的地方了!

 

如果你在使用 Fedora 系统,你可以找到这个目录:/etc/rc.d/init.d。实际上无论 init.d/ 放在什么地方,它都发挥着相同的作用。

 

为了能够使用init.d目录下的脚本,你需要有 root 权限。每个脚本都将被作为一个命令运行,该命令的结构大致如下所示:

/etc/init.d/command 选项


command 是实际运行的命令,选项可以有如下几种:

start
stop
reload
restart
force-reload


大多数的情况下,你会使用 start,stop,restart 选项。例如,如果你想关闭网络,你可以使用如下形式的命令:

/etc/init.d/networking stop


又比如,你改变了网络设置,并且需要重启网络。你可以使用如下命令:

/etc/init.d/networking restart


目录 /etc/init.d/ 下常用初始化脚本有:

networking
samba
apache2
ftpd
sshd
dovecot
mysql


当然,你可能有更多常用的脚本,这个取决于你安装了什么 Linux 操作系统。

其实目录 /etc/init.d 是符号链接文件,实际上是链接到目录 /etc/rc.d/init.d,你可以通过以下命令验证:

[root@localhost ~]# ll /etc/init.d
lrwxrwxrwx. 1 root root 11 5月  11 2019 /etc/init.d -> rc.d/init.d

or

[root@localhost ~]# ls -ld /etc/init.d
lrwxrwxrwx. 1 root root 11 5月  11 2019 /etc/init.d -> rc.d/init.d


建立方法是:
[root@localhost ~]# ln -s /etc/rc.d/init.d /etc/init.d

二、关于目录 /etc/rc.d/init.d/

大多数的 Linux 发行版本中,启动的是目录 /etc/rc.d/init.d/ 下的服务,这个目录下存放都是实际的服务脚本文件。

 

Linux 的每个运行级别,在 /etc/rc.d/ 下都有一个子目录分别是 rc0.d,rc1.d …… rc6.d,其实这些 rcN.d/ 目录下存放的都是链接到目录 /etc/rc.d/init.d/ 下部分脚本链接文件。每个级别要执行的服务就在相对应的目录下,比如级别 5 要启动的服务就都放在 rc5.d/ 下,但是放在这个 rc5.d/ 下的都是一些链接文件,链接到 /etc/rc.d/init.d/ 中相对应的实际脚本文件。

 

例如,目录 /etc/rc.d/rc2.d/ 下的 S10network 链接文件,实际是链接到目录 /etc/rc.d/init.d/ 下的脚本文件 network。

 

/etc/rc.d/rc2.d/ 下面的文件就是和运行级 2 有关的。文件开头的 S 代表 start 就是启动服务的意思,后面的数字 10 就是启动的顺序。例如,在同一个目录下,你还可以看到 S80postfix 这个文件,80 就是顺序在 10 以后,因为没有启动网络的情况下,启动 postfix 是没有任何作用的。

  

三、关于文件 /etc/rc.local

/etc/rc.local 也是我经常使用的一个脚本。该脚本是在系统初始化级别的脚本运行之后再执行的,因此可以安全地在里面添加你想在系统启动之后执行的脚本。常见的情况是你可以在里面添加 NFS 挂载 /mount 脚本。此外,你也可以在里面添加一些调试用的脚本命令。例如,我就碰到过这种情况:samba 服务总是无法正常运行,而检查发现,samba 是在系统启动过程中就该启动执行的,也就是说 samba守护程序配置保证了这种功能本应该正确执行。碰到这种类似情况,一般我也懒得花大量时间去查为什么,我只需要简单的在 /etc/rc.local 脚本里加上这么一行:/etc/init.d/samba start,这样就成功的解决了samba 服务异常的问题。

 

四、/etc/init.d/ 和 service 文件

service 文件是使用 systemd 作为初始化程序的 Linux 系统才有的服务文件,叫“服务配置单元文件”,用来取代旧初始化系统中的脚本文件,但是他们可能会同时存在系统中。

 

如果同时存在的话,在目录 /etc/init.d/ 下的脚本文件的优先级会高于目录 /etc/systemd/system/ 下的 service 文件。

 

五、关于命令 service

service xxxx start|stop|restart 相当于是对 /etc/init.d/ 下的 xxxx 的封装,相当于是一个管理命令,实际执行的是 /etc/init.d/下的可执行程序。如果 /etc/init.d/下没有该服务的可执行程序,则会查找对应的 service 文件

 

六、关于文件 /etc/inittab

这是 init 程序的配置文件,系统的运行级别就是在 /etc/inittab 文件里指定,所谓“运行级”就是操作系统当前正在运行的功能级别。这个级别从1 到6 ,具有不同的功能。

 

七、关于目录 /etc/init/

/etc/init/ 包含的是 Upstart(SysV init的替代版本)的配置文件,和 /etc/init.d/ 的作用几乎差不多。这样似乎 /etc/init/ 可以看作 /etc/init.d/ 的演化版本。

提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: