在/etc/rcx.d 目录中的 s 和 k 脚本是什么?

要理解这一点,我们需要对 Linux 机器的启动过程有一个简要的了解。

运行 /etc/rc.d 下的所有脚本是成功启动 Linux 操作系统的最后一步。

根据第 5 步,/etc/inittab 文件被执行,它告诉操作系统启动到配置文件中定义的特定级别。

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#id:3:initdefault:

正如你在上面看到的,我的 Linux 机器将启动到运行级别 3 。
因此,在下一步和最后一步中,操作系统将执行存储在 /etc/rc3.d 下的所有脚本,其中 rc3.d 用于运行级别 3.

类似地,我们将为从 rc0.d 到 rc6.d 的每个运行级别找到一个目录

所有这些目录都包含必须在 Linux 操作系统启动时启动的可执行脚本。

如果你查看这个目录,你会发现如下所示的脚本

lrwxrwxrwx 1 root root 16 Nov 16  2010 K10psacct -> ../init.d/psacct
lrwxrwxrwx 1 root root 15 Sep 10  2010 K15httpd -> ../init.d/httpd
lrwxrwxrwx 1 root root 13 Sep 10  2010 K20nfs -> ../init.d/nfs
lrwxrwxrwx 1 root root 14 Nov 16  2010 K25sshd -> ../init.d/sshd
lrwxrwxrwx 1 root root 17 Nov 16  2010 K30postfix -> ../init.d/postfix
lrwxrwxrwx 1 root root 19 Oct 12  2010 S20eventlogd -> ../init.d/eventlogd
lrwxrwxrwx 1 root root 16 Jan 28  2013 S21lsassd -> ../init.d/lsassd
lrwxrwxrwx 1 root root 20 Sep 10  2010 S22messagebus -> ../init.d/messagebus

如我们所见,所有脚本只不过是指向其他目录中的原始脚本的软链接。

所有脚本都以 S 或者 K 开头,现在这是什么意思?

这里 S 表示开始(Start),K 表示杀死(Kill)

数值指定脚本的执行顺序。

例如:

S20eventlogd 将在 S21lsassd 之前执行,操作系统启动时类似,K10psacct 将在系统开始关闭时 K15httpd 之前执行。

为什么使用符号链接而不是将脚本放在这些目录中?

因为以下两个原因

  • 我们必须在 rcx .d 的每个运行级别目录中放置相同的脚本
  • 即使我们愿意执行第 1 步,我们也无法定义脚本在启动和关闭期间执行的顺序。
日期:2020-06-02 22:17:14 来源:oir作者:oir