7、切换执行等级: init

       init是Linux系统操作中不可缺少的程序之一。所谓的init进程,它是一个由内核启动的用户级进程。
  内核自行启动后,运行的第一个用户进程就是init,所以,init的进程号始终是1。

init一共分为7个级别,这7个级别的所代表的含义如下

0:halt或者shutdown

1:单用户模式,只root用户进行维护

2:多用户模式,不能使用NFS(Net File System)

3:完全多用户模式(标准的运行级别)

4:安全模式

5:图形化(即图形界面)

6:重启(reboot)

根据上述的init级别含义,知道了initdefault设置不能为0和6了吧,要不然系统一启动就关机或重启,那是没得玩的了。。。

(索罗常习惯用init 0 来关机,用init 6来重启系统了)
那么init的老巢在哪里呢,find / -name init 一下看看:

findinit哈哈,init还是无处不在滴,索罗的系统中有若干个个init。但是启动的时候内核会在哪个地方调用运行init呢?

/sbin/init。这个地方是ninit的老巢 !

lsinit

如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。

###############################################################################

下面我们通过查看/etc/rc.d/中的rc*.d的文件来对比理解。。

rc.d 是 runlevel control directory 的缩写。
大多数的Linux 发行版本中,启动脚本都被放在/etc/rc.d/init.d。
这些脚本被ln 命令来连接到 /etc/rc.d/rcn.d 目录。(这里的n 就是运行级0-6)

init 0,对应的系统会运行,/etc/rc.d/rc0.d里指定的程序。

init 1,对应的系统会运行,/etc/rc.d/rc1.d里指定的程序。

.。。。。。。。

init 6,对应的系统会运行,/etc/rc.d/rc6.d里指定的程序。

下面看看rc.d下面的目录有啥内涵吧:

lsrcd

说明:

/etc/rc.d/init.d

该文件夹包含所有服务在各个运行等级中的全部启动脚本。一般来说,它们都是标准的shell脚本,遵守最基本的标准。每个脚本最少接受两个参数start和stop,它们分别代表启动和停止服务(如网页服务)。除此之外,init脚本通常还会接受一些额外的选项,如restart(重启服务器)、status(返回服务当前状态)、reload(告知服务从配置文件中重新载入配置)以及force-reload(强制服务重载它的配置)。当用不带参数的方式运行脚本的时候,一般应该返回一个它会接受的参数列表。

 

/etc/rc.d/rc0.d~/etc/rc.d/rc6.d

这些文件夹分别包含每个运行等级对应的init脚本。在实际使用中,它们一般通过符号链接到/etc/init.d文件夹下的实际文件。不过要注意的是,这些文件夹下的init脚本都有一些特别的名字,命名都以S(start)、K(kill)或D(disable)开头,后面跟一个数字。当init进入一个运行等级的时候,它会按照数字顺序运行所有以K开头的脚本并传入stop参数,除非对应的init脚本在前一个运行等级中没有启动。然后init按照数字顺序运行所有以S开头的脚本并传入start参数。任何以D开头的init脚本都会被忽略—这让你可以在指定的运行等级禁止一个脚本,或者你也可以仅仅移除全部符号链接。所以如果你有两个脚本,S01foo和S05bar,init首先会运行S01foo start,当它进入特定的运行等级后再执行S05bar start。

 

/etc/rc.d/rc.local

并非所有的发行版都使用了rc.local,通常它是一个留给用户修改的shell脚本。一般会在init进程结束的时候运行它,所以你可以在这里放一些想要运行的额外脚本,而不用再创建自己的init脚本。

 

/etc/rc.d/rc.sysinit

/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。

 

/etc/rc.d/rc

当运行级别改变时,负责启动/停止各种服务。

##############################################################################

 先看看rc0.d 吧: ls /etc/rc.d/rc0.d
rc0d

开机会执行的两个进程是killall和halt(s00killall和 s01halt),这两个都表示为终止进程。故init 0是用于表示关机的。

##############################################################################

再看看rc1.d : ls /etc/rc.d/rc1.d

init 1,对应的系统会运行,/etc/rc.d/rc1.d里指定的程序。
 rc1d

这个级别启动的服务有6个,sysstat、vm2-monitor、cpuspeed、blk、6udev、和single(单用户模式的服务)。故此级别是单用户模式,只有root能用,不支持其他用户。

##############################################################################

init 2,init3、init4、init5、init6 都是按照这个规则运行的。

看看重启系统 init6 吧:

lsrcd6

这个级别里,只有两个服务,一个为killall,一个是reboot,即,关闭现在的系统,重启。故此级别是重启。
yantaisolo

作者 yantaisolo