与系统启动相关的全部文件都存放在 /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 K59dund@ S12syslog@ S20xfs@ S34mDNSResponder@ S90crond@ K59hidd@ S13partmon@ S24messagebus@ S40atd@ S95kheader@ K59pand@ S14hplip@ S25bluetooth@ S56ntpd@ S99local@ S01udev@ S15cups@ S25haldaemon@ S56rawdevices@ S05harddrake@ S15mdadm@ S25netfs@ S75keytable@ S10network@ S17alsa@ S30dm@ S80postfix@ S12pcscd@ S18sound@ S33nifd@ S85numlock@
正如您看到的,此目录中的全部文件都是符号链接,而且它们的文件名格式还十分规范。一般的格式为:
<S|K><顺序><服务名>
S
代表启动(Start)服务,K
代表杀死(Kill) (停止)服务。脚本会按照增序逐个运行,如果两个脚本的编号相同,那么就会按照字母的升序运行。我们还可以看到,每个符号链接都指向 /etc/rc.d/init.d
目录中的给定脚本(除了负责控制某项特定服务的 local 脚本)。
当系统进入给定的运行级别时,系统会先按顺序运行 K
链接:rc 命令会查找链接指向的目标,然后带加上单个参数 stop
来调用相应的脚本。然后,再按相同的方法运行 S
脚本,只是参数换成了 start
。
现在,我们暂且不论脚本本身的功能。可以知道,当系统进入运行级别 5 时,会首先运行 K15dund 命令(即 /etc/rc.d/init.d/dund stop)。然后依次运行 K59hidd、K59pand 等等,直至运行完最后一个 K
脚本。接下来,再运行全部 S
脚本:先是 S01udev,也就是 /etc/rc.d/init.d/udev start,依此类推。
有了这些基本知识,您就可以在几分钟之内创建您自己的运行级别(比如使用运行级别 4),或者通过删除相应的符号链接来禁止启动或停止特定的服务。您还可以使用很多界面友好的程序来完成这一功能,比如使用图形界面的 DrakXServices(参看初学者指南中的用 DrakXServices 配置启动服务)和文本模式下的 chkconfig。