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

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

我正在从一本名为“Linux 命令行和 Shell 脚本圣经,第二版”书中这样写道:

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

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

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

答案1

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

然而,您的下一个问题是确保它们按顺序运行。你会如何执行呢?

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

换句话说,init.d包含要运行的脚本以及rcX.d它们的运行顺序。

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

如果深入研究rcX.d脚本,您会发现以下格式:

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

答案2

Linux 有几种不同的 init 系统。主要有系统初始化(传统的),暴发户(Ubuntu 的替代品),以及系统D(由 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(在 Upstart Ubuntu 和 Debian 上;位置可能因其他 Linux 发行版而异)。

答案3

/etc/init.d是初始化脚本所属的目录。

etc/rcX.d是控制进入运行级别时终止或启动哪些服务的链接X。 K开头的文件rcX.d带参数执行stop,以K开头的文件S带参数执行start。通常使用K或后面的两位数字来排序启动和停止顺序S。为了确保正确的启动和停止顺序,两个序列的总和通常为 100。

通过删除链接或将K或的大小写更改为或 ,可以在运行级别中禁用程序。Sks

编辑:管理员通常运行脚本,/etc/init.d根据发行版,脚本可能是指向另一个目录的符号链接。 (不同的发行版有不同的标准。)

rcX.d初始化代码使用它们来更改运行级别。

答案4

虽然@BillThor 已经很好地回答了这个问题,但这是我对/etc/rcX.d和 的理解/etc/init.d

  • /etc/init.d包含用于在引导时启动和停止各个应用程序的脚本。
  • /etc/rc?.d目录代表各种运行级别,其中包含的脚本只不过是/etc/init.d目录中实际脚本的符号链接。更改运行级别会更改系统的模式,例如从非常基本的单用户模式到仅控制台模式再到高级图形界面。

因此,没有目录本身就无法使用/etc/rc?.d目录/etc/init.d(当然,反之亦然)。

相关内容