Linux 中“/etc/init.d”和“/etc/rcX.d”目录之间有什么联系?

its*_*_me 26 linux init-script sysvinit

我正在从一本名为“ Linux 命令行和 Shell 脚本圣经,第二版”的书中学习命令行。这本书是这么说的:

一些 Linux 实现包含一个在启动时自动启动的进程表。在 Linux 系统上,该表通常位于特殊文件 /etc/inittabs 中。

其他系统(例如流行的 Ubuntu Linux 发行版)使用 /etc/init.d 文件夹,其中包含用于在启动时启动和停止单个应用程序的脚本。脚本通过 /etc/rcX.d 文件夹下的条目启动,其中 X 是运行级别。

可能因为我是 linux 新手,我不明白引用的第二段是什么意思。有人可以用更简单的语言解释相同的内容吗?

who*_*ami 36

让我们忘记init.drcx.d让事情变得非常简单。想象一下,您正在编写一个程序,其唯一职责是一个接一个地运行或终止其他脚本。

但是,您的下一个问题是确保它们按顺序运行。你会怎么做?

让我们想象一下这个程序在一个scripts文件夹中查看以运行脚本。要排序脚本的优先级,您可以按数字顺序命名它们。这个顺序决定了init.drc

换句话说,init.d包含要运行的脚本和要运行的脚本rcX.d

Xin的值rcX.d 是运行级别。这可以松散地转换为操作系统当前状态。

如果你深入挖掘rcX.d脚本,你会发现这种格式:

Xxxabcd
Run Code Online (Sandbox Code Playgroud)
  • X替换为Kor S,代表脚本是否应该在killedstarted在当前运行级别
  • xx 是订单号
  • abcd 是脚本名称(名称无关紧要,但它指向将运行的脚本)

  • 很好的解释,很清楚。谢谢@whoami (2认同)

Gil*_*il' 12

Linux 有几种不同的初始化系统。主要的有SysVinit(传统的)、Upstart(Ubuntu 的替代品)和SystemD(由 Fedora 和 Gnome 推出)。目录/etc/init.d/etc/rc?.d由 SysVinit 使用。这本书可能会在 Ubuntu 方面提到它们,因为这些信息有点过时(Ubuntu 曾经像其他人一样使用 SysVinit),或者因为这些目录仍然存在以实现兼容性。

/etc/init.d包含一堆脚本,每个脚本都包含启动和停止服务的指令。其中一些服务需要在启动时启动;其他需要在多用户模式下启动,但不需要在单用户维护模式下启动;并且可以使用不同的所需服务集定义不同的模式。SysVinit 通过运行级别来管理它。该目录/etc/rc$N.d包含进入运行级别 N ( /etc/rc$N.d/S*) 时要运行的脚本和离开运行级别 N ( /etc/rc$N.d/K*)时要运行的脚本。因为许多运行级别都有共同的脚本,而不是为每个运行级别存储脚本的副本,脚本都存储在一个位置/etc/init.d,并且运行级别特定的目录/etc/rc?.d包含符号链接。此外,符号链接的名称指示在该运行级别中是要启动 ( S*) 还是停止 (终止K*) 服务,并且使用数字前缀来控制脚本的执行顺序。

负责遍历的脚本/etc/rc$N.d/etc/init.d/rc(在 Pre-Upstart Ubuntu 和 Debian 上;其他 Linux 发行版上的位置可能会有所不同)。