与系统启动相关的全部文件都存放在 /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
目录。在一个典型的 Mandriva Linux 安装中,您将会看到六个运行级别:
$ ls /etc/rc.d/rc3.d/ K09dm@ S12syslog@ S24messagebus@ S40atd@ S91dictd-server@ S01udev@ S13partmon@ S25haldaemon@ S55sshd@ S92lisa@ S03iptables@ S15cups@ S25netfs@ S56ntpd@ S95kheader@ S05harddrake@ S17alsa@ S29numlock@ S56rawdevices@ S99local@ S10network@ S18sound@ S33nifd@ S75keytable@ S11shorewall@ S20xfs@ S34mDNSResponder@ S90crond@ $
正如您看到的,此目录中的全部文件都是符号链接,而且它们的文件名格式还十分规范。一般的格式为:
<S|K><顺序><服务名>
S
代表启动(Start)服务,K
代表杀死(Kill) (停止)服务。脚本会按照增序逐个运行,如果两个脚本的编号相同,那么就会按照字母的升序运行。我们还可以看到,每个符号链接都指向 /etc/rc.d/init.d
目录中的给定脚本(除了负责控制某项特定服务的 local 脚本)。
当系统进入给定的运行级别时,系统会先按顺序运行 K
链接:rc 命令会查找链接指向的目标,然后带加上单个参数 stop
来调用相应的脚本。然后,再按相同的方法运行 S
脚本,只是参数换成了 start
。
现在,我们暂且不论脚本本身的功能。可以知道,当系统进入运行级别 3 时,会首先运行 K09dm 命令(即 /etc/init.d/dm stop)。然后再运行全部 S
脚本:先是 S01udev,也就是调用 /etc/rc.d/init.d/udev start,然后是 S03iptables,依此类推。
掌握了这一信息,您就可以在几分钟之内创建您自己的完整的运行级别(例如,使用运行级别 4),或者通过删除相应的符号链接来启动或停止服务。
您还可以使用 chkconfig 命令添加、删除、激活或禁用给定运行级别的服务。使用 chkconfig --add 服务名 可将服务名
添加(激活)到支持的[30]全部运行级别,而chkconfig --del 服务名可从所有运行级别中删除(取消)指定的服务。
执行 chkconfig --levels 35 sshd on 将在运行级别 3 和 5 上激活 SSH 服务器,而执行 chkconfig --levels 3 sound off 将从运行级别 3 中删除声音支持。如果您省略 --levels 级别列表
选项,则给出的服务将在在运行级别 2、3、4 和 5 中启用或禁用。但是,您应该注意到,您有可能在无意间在本不支持相应服务的运行级别中启用该服务,所以最好还是指定要影响的运行级别比较好。
您也可以 service 命令控制运行中系统的服务是否要在特定的运行级别中运行。其语法为:
service 服务名 动作