我正在从一本名为“Linux 命令行和 Shell 脚本圣经,第二版”书中这样写道:
一些 Linux 实现包含一个在启动时自动启动的进程表。在 Linux 系统上,该表通常位于特殊文件 /etc/inittabs 中。
其他系统(例如流行的 Ubuntu Linux 发行版)使用 /etc/init.d 文件夹,其中包含用于在引导时启动和停止单个应用程序的脚本。这些脚本通过 /etc/rcX.d 文件夹下的条目启动,其中 X 是运行级别。
可能是因为我是linux新手,所以不明白引用的第二段是什么意思。有人可以用更简单的语言解释一下吗?
答案1
让我们忘记init.d
orrcx.d
并让事情变得非常简单。想象一下,您正在编写一个程序,其唯一的职责是逐个运行或终止其他脚本。
然而,您的下一个问题是确保它们按顺序运行。你会如何执行呢?
让我们想象一下这个程序查看一个scripts
文件夹来运行脚本。要排序脚本的优先级,您可以按数字顺序命名它们。这个顺序决定了init.d
和之间的关系rc
换句话说,init.d
包含要运行的脚本以及rcX.d
它们的运行顺序。
X
中的值是rcX.d
运行级别。这可以松散地转换为操作系统的当前状态。
如果深入研究rcX.d
脚本,您会发现以下格式:
Xxxabcd
X
被替换为K
orS
,它代表脚本是否应该killed
在started
当前运行级别中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
或的大小写更改为或 ,可以在运行级别中禁用程序。S
k
s
编辑:管理员通常运行脚本,/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
(当然,反之亦然)。