Linux中“ /etc/init.d”和“ /etc/rcX.d”目录之间的连接是什么?


25

我正在从一本名为《Linux命令行和Shell脚本圣经,第二版》的书中学习命令行。该书指出:

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

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

可能是因为我是Linux新手,所以我不明白第二段引用的含义。有人可以用更简单的语言来解释吗?


这已被问了很多次
BSD

@bdowning这是不同的。我有上下文。我在链接到的页面中看到的问题与此不同,IMO。
its_me 2012年

@bdowning,但如果您觉得是重复的,则标记为重复将更具信息性
n611x007

Answers:


30

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

但是,您的下一个问题是确保它们按顺序运行。您将如何执行?

并让我们想象一下该程序在scripts用于运行脚本的文件夹中查找。为了排序脚本的优先级,您可以使用数字顺序来命名它们。该顺序决定了init.d和之间的关系。rc

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

中的XrcX.d 是运行级别。这可以宽松地转换为OS当前状态。

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

Xxxabcd
  • XK或代替S,代表脚本应该是killed还是started处于当前运行级别
  • xx 是订单号
  • abcd 是脚本名称(名称无关紧要,但是它指向的位置将是要运行的脚本)

2
精彩的解释,非常清晰。感谢@whoami
its_me 2012年

9

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*)还是停止(killed K*),并且使用数字前缀来控制脚本的执行顺序。

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


因此,Ubuntu不再使用/etc/init.d,而是使用/etc/rc?.dUpstart了吗?
its_me 2012年

1
@ KrishD'Souza不完全是。Ubuntu使用Upstart而不是SysVinit,但是许多软件包仍在其中附带脚本/etc/init.d(而不是中的Upstart .conf文件/etc/init),因此Upstart仍支持/etc/init.d/etc/rc?.d兼容性。
吉尔斯(Gilles)'所以

从15.04开始,Ubuntu从Upstart切换到systemd。因此,目前(16.04),Ubuntu具有三个初始化系统:SysVinit,Upstart和systemd。保留第一和第二个是为了向后兼容。
PetroCliff '16

4

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

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

通过删除链接或更改Kor或Sto k或的大小写,可以在运行级别禁用程序s

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

rcX.d被使用的初始化代码来改变运行级别。


在大多数系统上,/etc/init.d是指向目录的符号链接/etc/rc.d/init.d
Nikhil Mulley

1
所以,基本上/etc/init.d没有没有用/etc/rcX.d?而且由于/etc/rcX.d是启动时启动的程序的控制器,所以它的功能类似于,对/etc/init.d吗?
its_me 2012年

这取决于系统。例如,Gentoo的init文件只使用/etc/init.d。它没有/etc/rc*.d目录。同样,Arch Linux仅具有/etc/rc.d,而不是/etc/init.d。
laebshade 2012年

1

尽管@BillThor的使用效果很好,但这是我对/etc/rcX.dand 的理解/etc/init.d

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.