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 一下看看:
哈哈,init还是无处不在滴,索罗的系统中有若干个个init。但是启动的时候内核会在哪个地方调用运行init呢?
/sbin/init。这个地方是ninit的老巢 !
如果内核找不到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下面的目录有啥内涵吧:
说明:
/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
当运行级别改变时,负责启动/停止各种服务。
##############################################################################
开机会执行的两个进程是killall和halt(s00killall和 s01halt),这两个都表示为终止进程。故init 0是用于表示关机的。
##############################################################################
再看看rc1.d : ls /etc/rc.d/rc1.d
这个级别启动的服务有6个,sysstat、vm2-monitor、cpuspeed、blk、6udev、和single(单用户模式的服务)。故此级别是单用户模式,只有root能用,不支持其他用户。
##############################################################################
init 2,init3、init4、init5、init6 都是按照这个规则运行的。
看看重启系统 init6 吧: