运行级别

与系统启动相关的全部文件都存放在 /etc/rc.d 目录。这是该目录的文件列表:

$ ls /etc/rc.d
init.d/  rc0.d/  rc2.d/  rc4.d/  rc6.d/            rc.local*    rc.sysinit*
rc*      rc1.d/  rc3.d/  rc5.d/  rc.alsa_default*  rc.modules*

和我们先前介绍的一样,系统运行的第一个文件就是 rc.sysinit。它的责任是设置计算机的基本配置:键盘类型、特定设备的配置、文件系统检查,等等。

然后会运行 rc 脚本,并将需要的运行级别作为参数。我们在上面已经看到过了,运行级别不过是一个整数,而且对每个定义的运行级别 <x>,必定有一个与其对应的 rc<x>.d 目录。在一个典型的 Mandrakelinux 安装中,您可能会看到六个运行级别:

现在,让我们来看一下 rc5.d 目录中的内容:

$ ls rc5.d
K15postgresql@  K60atd@      S15netfs@   S60lpd@        S90xfs@
K20nfs@         K96pcmcia@   S20random@  S60nfs@        S99linuxconf@
K20rstatd@      S05apmd@     S30syslog@  S66yppasswdd@  S99local@
K20rusersd@     S10network@  S40crond@   S75keytable@
K20rwhod@       S11portmap@  S50inet@    S85gpm@
K30sendmail@    S12ypserv@   S55named@   S85httpd@
K35smb@         S13ypbind@   S55routed@  S85sound@

正如您看到的,此目录中的全部文件都是符号链接,而且它们的文件名格式还十分规范。一般的格式为:

<S|K><顺序><服务名>

S 代表启动(Start)服务,K 代表杀死(Kill)(停止)服务。脚本会按照增序的逐个运行,如果两个脚本的编号相同,那么就会按照字母的升序运行。我们还可以看到,每个符号链接都指向 /etc/rc.d/init.d 目录中的给定脚本(而不是负责控制指定服务的 local 脚本。)

当系统进入给定的运行级别时,系统会先按顺序运行 K 链接:rc 命令会查找链接指向的目标,然后带加上单个参数 stop 来调用相应的脚本。然后,再按相同的方法运行 S 脚本,只是参数换成了 start

现在,我们不讨论脚本本身的功能。可以知道,当系统进入运行级别 5 时,会首先运行 K15postgresql 命令(即 /etc/rc.d/init.d/postgresql stop)。然后依次运行 K20nfsK20rstatd 等等,直至运行完最后一个 K 脚本。接下来,再运行全部 S 脚本:先是 S05apmd,也就是 /etc/rc.d/init.d/apmd start,依此类推。

有了这些基本知识,您就可以在几分钟之内创建您自己的运行级别(比如使用运行级别 4),或者通过删除相应的符号链接来禁止启动或停止特定的服务。您还可以使用很多界面友好的程序来完成这一功能,比如使用图形界面的 DrakXServices(参见初学者指南 中的 DrakXServices:配置启动服务)和文本模式下的 chkconfig

[Tip]提示

您还可以使用 chkconfig 命令来列出、添加或删除特定运行级别中的脚本。参见 chkconfig(8)