与系统启动相关的全部文件都存放在 /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 安装中,您可能会看到六个运行级别:
$ 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)。然后依次运行 K20nfs、K20rstatd 等等,直至运行完最后一个 K 脚本。接下来,再运行全部 S 脚本:先是 S05apmd,也就是 /etc/rc.d/init.d/apmd start,依此类推。
有了这些基本知识,您就可以在几分钟之内创建您自己的运行级别(比如使用运行级别 4),或者通过删除相应的符号链接来禁止启动或停止特定的服务。您还可以使用很多界面友好的程序来完成这一功能,比如使用图形界面的 DrakXServices(参见初学者指南 中的 DrakXServices:配置启动服务)和文本模式下的 chkconfig。