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.d
或rcx.d
让事情变得非常简单。想象一下,您正在编写一个程序,其唯一职责是一个接一个地运行或终止其他脚本。
但是,您的下一个问题是确保它们按顺序运行。你会怎么做?
让我们想象一下这个程序在一个scripts
文件夹中查看以运行脚本。要排序脚本的优先级,您可以按数字顺序命名它们。这个顺序决定了init.d
和rc
换句话说,init.d
包含要运行的脚本和要运行的脚本rcX.d
。
X
in的值rcX.d
是运行级别。这可以松散地转换为操作系统当前状态。
如果你深入挖掘rcX.d
脚本,你会发现这种格式:
Xxxabcd
Run Code Online (Sandbox Code Playgroud)
X
替换为K
or S
,代表脚本是否应该在killed
或started
在当前运行级别xx
是订单号abcd
是脚本名称(名称无关紧要,但它指向将运行的脚本)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 发行版上的位置可能会有所不同)。