- 从Linux的启动过程可以知道,在经过hardware-boot,OS loader,kernel startup之后,控制权就交到init程序手上了(详细请见启动过程)。
- init程序是根据/etc/inittab文件来进行启动工作的,从/etc/inittab可以知道由init引导的更具体的启动过程。
redhat底下inittab文件实例:
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level./*inittab文件描述了在一个确定的运行级别上init程序如何引导和创建系统*/
#
# Author: Miquel van Smoorenburg,
# Modified for RHS Linux by Marc Ewing and Donnie Barnes/*作者信息*/
#
# Default runlevel. The runlevels used by RHS are: /*RedHat中使用的各个运行级别*/
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault: /*设定系统默认的运行级别*/
# System initialization. /*通过sysinit进行系统的初始化*/
si::sysinit:/etc/rc.d/rc.sysinit
/*通过rc程序进行各个运行级别中具体服务的执行*/
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Trap CTRL-ALT-DELETE /*定义重启键*/
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly. /*当电源有问题的时候执行shutdown*/
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it./*电源恢复的时候停止执行shutdown*/
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
# Run gettys in standard runlevels /*定义各虚拟控制台*/
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5 /*运行X-window*/
x:5:respawn:/etc/X11/prefdm -nodaemon
- 组成这个文件的每行都有4个部分,用“:”分隔开:
id - 该行的标识
runlevels - 该行为应该发生的运行级的列表
action - 应发生的行为
process - 应由init启动的进程。
- action中常见的参数解释:
有效的action值如下:
respawn:表示init应该监视这个进程,即使其结束后也应该被重新启动。
wait: init应该运行这个进程一次,并等待其结束后再进行下一步操作。
once: init需要运行这个进程一次。
boot: 随系统启动运行,所以runlevel值对其无效。
bootwait:随系统启动运行,并且init应该等待其结束。
off: 没有任何意义。
initdefault:系统启动后的默认运行级别;由于进入相应的运行级别会激活对应级别的进程,所以对其指定process字段没有任何意义。如果inittab文件内不存在这一条记录,系统启动时在控制台上询问进入的运行级。
sysinit: 系统启动时准备运行的命令。比如说,这个命令将清除/tmp。可以查看/etc/rc.d/rc.sysinit脚本了解其运行了那些操作。
powerwait:允许init在电源被切断时,关闭系统。当然前提是有U P S和监视U P S并通知init电源已被切断的软件。RH linux默认没有列出该选项。
powerfail: 同powerwait,但init不会等待正在运行的进程结束。RH linux默认没有列出该选项。
powerokwait:当电源监视软件报告“电源恢复”时,init要执行的操作。
powerfailnow:检测到ups电源即将耗尽时,init要执行的操作,和powerwait/powerfail不同。
ctrlaltdel:允许init在用户于控制台键盘上按下C t r l + A l t + D e l组合键时,重新启动系统。
总结:
- init处理/etc/inittab文件,根据inittab的输入,init将依次:
- 设置缺省的运行级
- rc.sysinit对系统初始化
- /etc/rc.d/rc.sysinit的主要功能:获取网络环境与主机类型;测试与载入内存设备及USB设备;决定是否启动SELINUX;接口设备的检测与即插即用(PnP)参数的测试;用户自定义模块的加载等。
- 通过rc程序进行各个运行级别中具体服务的执行,详见运行级别
- 决定在特殊情况,例如ctrl-alt-del或停电时应采取的行动
- 为运行级2、3、4和5启动getty
- 为运行级5启动图形界面的登录管理器