1.5.2 系统运行级别

前一节多次提到了runlevel这个词,但是runlevel究竟是什么呢?我们说Linux默认有7个运行级,从运行级0到运行级6,每一个运行级所对应的含义如下:

运行级0:关机。

运行级1:单用户模式,系统出现问题时可使用这种模式进入系统维护,典型的使用场景是在忘记root密码时可进入此模式修改root密码。

运行级2:多用户模式,但是没有网络连接。

运行级3:完全多用户模式,这也是Linux服务器最常见的运行级。

运行级4:保留未使用。

运行级5:窗口模式,支持多用户,支持网络。

运行级6:重启。

任何时候Linux只能在一种runlevel下运行。那么不同的runlevel之间到底有什么区别呢?上一节中提到,系统在启动的过程中会根据etcinittab中的设定读取runlevel的数值X,并相应地读取和运行etcrcX.d(X代表0~6)下所有的脚本。看一下etcrc3.d中的内容:


  1. [root@localhost ~]# ll etcrc3.d/
  2. total 288
  3. ......(
  4. 略去内容)......
  5. lrwxrwxrwx 1 root root 15 Oct 7 20:52 K15httpd -> ../init.d/httpd
  6. lrwxrwxrwx 1 root root 13 Oct 7 20:55 K20nfs -> ../init.d/nfs
  7. ......(
  8. 略去内容)......
  9. lrwxrwxrwx 1 root root 18 Oct 7 20:50 S08iptables -> ../init.d/iptables
  10. lrwxrwxrwx 1 root root 17 Oct 7 20:52 S10network -> ../init.d/network
  11. ......(
  12. 略去内容)......

注意看每行中第9列的内容,分别是以K或S开头、后跟两位数字、再接服务名的文件,其实它们链接的是上层init.d目录中的服务脚本。系统在启动过程中,会首先运行以K开头的脚本,全部运行完毕后再运行以S开头的脚本,在运行所有K开头的脚本时,又会严格按照K后面的数字大小依次来运行,也就是数字小的先运行,数字大的后运行。同样,在运行S开头的脚本时,也是按照这个原则进行的,即先运行数字小的脚本,再运行数字大的脚本。K和S的意思分别是停止(kill)和启动(start),只要定义好不同运行级需要启动和停止的服务,就可以让系统在不同的运行级下启动和关闭不一样的服务。再来对比一下etcrc1.d下的关于network项内容:


  1. [root@localhost ~]# ll etcrc1.d/
  2. total 288
  3. ......(
  4. 略去内容)......
  5. lrwxrwxrwx 1 root root 17 Oct 7 20:52 K90network -> ../init.d/network
  6. ......(
  7. 略去内容)......

在运行级为1的时候,network是在开机启动的过程中被关闭的(K90network),而在运行级为3的时候,network则是被开启的(S10network)。