9.3. 运行级别

运行级别init 和整个系统的一种状态,它定义了哪些系统服务正在运行。运行级别由数字标识。一些系统管理员使用运行级别来定义哪些子系统正在工作,例如,X 是否正在运行,网络是否可操作等等。其他人则始终运行所有子系统,或者单独启动和停止它们,而不更改运行级别,因为运行级别对于控制他们的系统来说太粗糙了。你需要自己决定,但遵循你的 Linux 发行版的方式可能是最容易的。

下表定义了大多数 Linux 发行版如何定义不同的运行级别。但是,运行级别 2 到 5 可以修改以适合你自己的喜好。

表 9-1. 运行级别编号

0停止系统。
1单用户模式(用于特殊管理)。
2本地多用户模式,带有网络但没有网络服务(如 NFS)
3完全多用户模式,带有网络
4未使用
5完全多用户模式,带有网络和 X Windows (GUI)
6重启。

在特定运行时启动的服务由各种rcN.d目录的内容决定。大多数发行版将这些目录放在/etc/init.d/rcN.d/etc/rcN.d。(将 N 替换为运行级别编号。)

在每个运行级别中,你都会找到一系列指向位于/etc/init.d中的启动脚本的符号链接。这些链接的名称都以 K 或 S 开头,后跟一个数字。如果链接的名称以 S 开头,则表示当你进入该运行级别时,该服务将被启动。如果链接的名称以 K 开头,则该服务将被终止(如果正在运行)。

K 或 S 后面的数字表示脚本运行的顺序。这是一个/etc/init.d/rc3.d可能看起来的示例。

# ls -l /etc/init.d/rc3.d
lrwxrwxrwx  1 root root 10 2004-11-29 22:09 K12nfsboot -> ../nfsboot
lrwxrwxrwx  1 root root  6 2005-03-29 13:42 K15xdm -> ../xdm
lrwxrwxrwx  1 root root  9 2004-11-29 22:08 S01pcmcia -> ../pcmcia
lrwxrwxrwx  1 root root  9 2004-11-29 22:06 S01random -> ../random
lrwxrwxrwx  1 root root 11 2005-03-01 11:56 S02firewall -> ../firewall
lrwxrwxrwx  1 root root 10 2004-11-29 22:34 S05network -> ../network
lrwxrwxrwx  1 root root  9 2004-11-29 22:07 S06syslog -> ../syslog
lrwxrwxrwx  1 root root 10 2004-11-29 22:09 S08portmap -> ../portmap
lrwxrwxrwx  1 root root  9 2004-11-29 22:07 S08resmgr -> ../resmgr
lrwxrwxrwx  1 root root  6 2004-11-29 22:09 S10nfs -> ../nfs
lrwxrwxrwx  1 root root 12 2004-11-29 22:40 S12alsasound -> ../alsasound
lrwxrwxrwx  1 root root  8 2004-11-29 22:09 S12fbset -> ../fbset
lrwxrwxrwx  1 root root  7 2004-11-29 22:10 S12sshd -> ../sshd
lrwxrwxrwx  1 root root  8 2005-02-01 09:24 S12xntpd -> ../xntpd
lrwxrwxrwx  1 root root  7 2004-12-02 20:34 S13cups -> ../cups
lrwxrwxrwx  1 root root  6 2004-11-29 22:09 S13kbd -> ../kbd
lrwxrwxrwx  1 root root 13 2004-11-29 22:10 S13powersaved -> ../powersaved
lrwxrwxrwx  1 root root  9 2004-11-29 22:09 S14hwscan -> ../hwscan
lrwxrwxrwx  1 root root  7 2004-11-29 22:10 S14nscd -> ../nscd
lrwxrwxrwx  1 root root 10 2004-11-29 22:10 S14postfix -> ../postfix
lrwxrwxrwx  1 root root  6 2005-02-04 13:27 S14smb -> ../smb
lrwxrwxrwx  1 root root  7 2004-11-29 22:10 S15cron -> ../cron
lrwxrwxrwx  1 root root  8 2004-12-22 20:35 S15smbfs -> ../smbfs

运行级别如何启动在/etc/inittab中配置,通过如下行:

l2:2:wait:/etc/init.d/rc 2
第一个字段是任意标签,第二个字段意味着这适用于运行级别 2。第三个字段意味着 init 应该在进入运行级别时运行第四个字段中的命令一次,并且 init 应该等待它完成。/etc/init.d/rc命令运行启动和停止服务以进入运行级别 2 所需的任何命令。

第四个字段中的命令完成了设置运行级别的所有繁重工作。它启动尚未运行的服务,并停止不应再在新运行级别中运行的服务。命令的具体内容以及运行级别的配置方式取决于 Linux 发行版。

init 启动时,它会在/etc/inittab中查找指定默认运行级别的行

id:2:initdefault:
你可以通过向内核提供singleemergency的命令行参数,要求 init 在启动时进入非默认运行级别。内核命令行参数可以通过 LILO 等方式给出。这允许你选择单用户模式(运行级别 1)。

当系统运行时,telinit 命令可以更改运行级别。当运行级别更改时,init/etc/inittab.