ITEEDU

Linux系统学习基础

第一章 开发工具学习

第二章 Linux内核制作

第三章 initramfs制作

第四章 Linux系统制作原理

第五章 文件系统启动方式配制

Sys V init 启动方式

Linux 使用的是基于运行级(run-levels) 概念的称为 SysVinit 的专用启动工具。 它在不同的系统上可能是完全不一样的, 所以不能认为一个脚本在某个 Linux 发行版上工作正常。

System V init的主要思想是定义了不同的"运行级别(runlevel)"。通过配置文件/etc/inittab定义了系统引导时的运行级别, 进入或者切换到一个运行级别时做什么。每个运行级别对应于一个子目录/etc/rc.d/rcX.d。

在etc/inittab中action为sysinit的一行会给初始化脚本传入一个参数,一般为一数字,例如:

si::sysinit:/etc/rc.d/init.d/rc 5

rc脚本会合成 /etc/rc.d / rc5.d目录,其中5是传入的参数,并执行其中的脚本来开关服务。

SysVinit(从现在开始我们称之为"init")以运行级的模式来工作,一般有 7 (从 0 到 6)个运行级 (实际上可以有更多的运行级,但都是用于特殊情况而且一般使用不到。 参见 init(8)以获得更多信息),每个运行级对应于一套设定好的任务, 当启动一个运行级的时候, 计算机就需要执行相应的任务。 默认的运行级是 3,下面是对不同运行级的描述:

0: 关闭计算机
1: 单用户模式
2: 无网络多用户模式
3: 有网络多用户模式
4: 保留作自定义,否则同运行级 3
5: 同运行级 4,一般用于图形界面(GUI)登录(如 X的 xdm 或 KDE的 kdm)
6: 重启动计算机

用来改变运行级别的命令是init <runlevel>,在这里 <runlevel>是目标运行级别。 例如, 要重启计算机, 用户可以执行 init 6 命令,它是 reboot 命令的别名。 同样, init 0 是 halt 命令的别名。

在 /etc/rc.d 目录下有很多类似 rc?.d (这里 ? 是运行级别的数值) 和 rcsysinit.d 的目录, 里面都包含许多符号链接,其中一些以 K 字母开头,另外一些以 S 字母开头, 这些链接名在首字母后面都跟着两个数字。 这个 K 的含义是停止 (kill) 一个服务, S 的含义是启动一个服务。而数字则确定这些脚本的启动顺序,从 00 到 99(数字越小执行的越早)。 当 init 转换到其它运行级时, 一些相应的服务会停止, 而另一些服务则会启动。

真正的脚本在 /etc/rc.d/init.d 目录下, 它们完成实际工作, 符号链接都是指向它们的。 停止脚本的链接和启动脚本的链接都指向 /etc/rc.d/init.d 目录下的同一个脚本。 这是因为调用这些脚本时可以使用不同的参数,例如 start, stop, restart, reload, 和 status。 当调用 K 链接时,相应的脚本用 stop参数运行;当调用 S 链接时,相应的脚本用start 参数运行。

上面的说明有一个例外,在 rc0.d 和 rc6.d 目录下以 S 开头的链接不会启动任何东西, 而是用stop参数调用, 来停止某些服务。 这背后的逻辑是, 当用户要重启或关闭系统的时候, 不会要启动什么服务, 只会要系统停止。

以下是脚本参数的描述:

start

启动服务。

stop

停止服务。

restart

关闭服务,然后再启动。

reload

该服务的配置已更新。如果修改了某个服务的配置文件,又不必重启这个服务的时候, 可以使用这个参数

status

显示服务的状态,如果服务正在运行,会显示该服务进程的 PID 。

可以参考 linux文件系统初始化步骤,其中有例子。