init是Linux启动的最后一步,它帮助用户完成每次启动系统都必须完成的一些重复性任务,如加载文件系统、各类网络服务等等程序;它还有一个重要用途,让用户自定义系统运行环境,只启动需要的进程,关闭不用的进程,释放内存和处理器资源,让系统运行得更快更稳。
init会按任务表/etc/inittab里面的设置运行对应的脚本。我们可以为系统制定多个运行环境以满足不同任务的需要,在 inittab中称之为运行等级(runlevel)。
下面是我的gentoo的/etc/inittab文件:
======================================================
id:3:initdefault:
si::sysinit:/sbin/rc sysinit
rc::bootwait:/sbin/rc boot
l0:0:wait:/sbin/rc shutdown
l1:S1:wait:/sbin/rc single
l2:2:wait:/sbin/rc nonetwork
l3:3:wait:/sbin/rc default
l4:4:wait:/sbin/rc default
l5:5:wait:/sbin/rc default
l6:6:wait:/sbin/rc reboot
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:2345:respawn:/sbin/agetty 38400 tty2 linux
c3:2345:respawn:/sbin/agetty 38400 tty3 linux
c4:2345:respawn:/sbin/agetty 38400 tty4 linux
c5:2345:respawn:/sbin/agetty 38400 tty5 linux
c6:2345:respawn:/sbin/agetty 38400 tty6 linux
ca:12345:ctrlaltdel:/sbin/shutdown -r now
x:a:once:/etc/X11/startDM.sh
======================================================
该文件有一个基本类型的指令,它们指定命令行,命令行所采取的动作,在何种运行等级下激活命令。这引起命令行的格式大体如下:
id:runlevels:action:process
id是任意一个名称(具体是什么并不重要),runlevels是一个数字串(代表运行等级),action描述何时执行命令,process指定执行的实际命令。
拿启动agetty的命令行举例:
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
该命令告诉init,它应该在引导后以运行等级1-5运行命令/sbin/agetty 38400 tty1。动作标记respawn表示命令在退出时重新运行(当用户在shell输入exit的时候)。
·respawn:启动命令并监视命令的执行,当进程退出时,再次执行该命令(通常用于虚拟终端设备上的登录提示)。
·wait:进入指定运行等级时,启动进程。init会停下来,直到执行完成。这个标记用于设置特定等级下软件的启动。
·once:进入指定的任一运行等级时,启动一次进程。
.boot:当系统启动时执行,这种类型的执行忽略runlevel.
.bootwait:当系统启动时执行,init进程等待这些脚本执行完成,象/etc/rc.
·initdefault:这种类型的项指定在系统引导时进入哪个运行等级。
.sysinit:在boot或者bootwait之前启动,这种类型的执行忽略runlevel.
·powerwait:这类指令给出在电源不足时需要执行的命令。init直到进程完成后才继续工作。
·powerfail:与powerwait类似,但init不等待进程完成。
·powerworkwait:电源正常后执行。init暂停,直到进程结束。
·powerfailnow:当便携机电池或外部UPS电池电量不足时执行。
·ctrlaltdel:指定init在捕获ctrl+alt+del组合键时执行的命令。
·kbdrequest:把特殊动作映射到特定的按键。Debian中的是alt+UpArrow。
从上面的分析可以看到:
id:3:initdefault:
#系统的缺省级别是3
si::sysinit:/sbin/rc sysinit
#系统启动时自动执行脚本/sbin/rc sysinit
那么我们可以看下/sbin/rc,这个是一个脚本,rc到底干了什么事情呢?请听下回分解!!!!!!
l3:3:wait:/sbin/rc default
#当系统运行级别是3的时候,init等待/sbin/rc default执行完
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
#在1-5运行级别的时候运行/sbin/agetty,如果进程退出,再次执行/sbin/agetty
ca:12345:ctrlaltdel:/sbin/shutdown -r now
#在1-5运行级别按下ctrlaltdel,那么系统就shutdown now!!!
x:a:once:/etc/X11/startDM.sh
#不管是什么runlevel,都会执行/etc/X11/startDM.sh,启动X,只有启动一次
阅读(1822) | 评论(0) | 转发(0) |