init 系统的主要作用是启动和停止必要的进程。Linux 经历了三种主要的 init 实现:System V、Upstart 和 systemd。本课程重点介绍最传统的版本——System V init,通常简称为 SysV 或直接称为 systemv(发音为“System Five”)。
要确定您的系统是否使用 systemv 实现,请检查是否存在 /etc/inittab 文件。如果该文件存在,那么您很可能正在运行基于 SysV 的发行版。
System V 如何管理进程
systemv init 进程按顺序启动和停止服务。例如,如果一个名为 foo-b 的服务依赖于 foo-a,那么在 foo-a 完全运行之前,foo-b 无法启动。initv 系统通过使用 shell 脚本来实现这一点。这些脚本位于特定目录中,负责服务的启动和停止。虽然您可以编写自定义脚本,但大多数系统依赖于预先打包好的脚本来管理必要的操作系统服务。
优点和缺点
这种顺序方法的优点在于其简单性和可预测性。依赖关系的故障排除很直接,因为您知道 foo-a 总是先于 foo-b 启动。然而,init v 模型的主要缺点是性能,因为服务通常一次只启动一个,与现代并行系统相比,这会导致更慢的启动时间。
理解 System V 中的运行级别
在 systemv 环境中,机器的状态由运行级别(runlevels)定义,编号从 0 到 6。这些模式在不同的 Linux 发行版中可能略有不同,但它们通常遵循以下标准约定:
- 0: 关机 (Shutdown)
- 1: 单用户模式 (Single User Mode)
- 2: 多用户模式,无网络 (Multiuser mode without networking)
- 3: 多用户模式,带网络 (Multiuser mode with networking)
- 4: 未使用 (Unused)
- 5: 多用户模式,带网络和图形界面 (Multiuser mode with networking and GUI)
- 6: 重启 (Reboot)
Init 脚本和目录
当您的系统启动时,它会检查其配置的运行级别并执行相应的脚本。这些脚本通常位于 /etc/rc.d/rc[runlevel].d/ 等目录中,或位于中央的 /etc/init.d 目录内。以 S(Start,启动)开头的脚本在启动时执行,而以 K(Kill,终止)开头的脚本在关机时运行。S 或 K 后面的数字决定了执行顺序。
例如:
pete@icebox:/etc/rc.d/rc0.d$ ls
K10updates K80openvpn
在这个例子中,切换到运行级别 0(关机)时,将首先运行终止更新服务的脚本,然后运行 OpenVPN 的脚本。您可以在 /etc/inittab 文件中找到机器的默认运行级别,也可以在那里更改它。
需要注意的是,在大多数现代 Linux 发行版中,System V 已基本被 systemd 取代。然而,您可能仍然会在较新的 init 系统中遇到运行级别的概念,因为它们通常提供一个兼容层来支持依赖于 systemv init 脚本的遗留服务。