在加载了内核之后,由内核执行引导的第一个进程就是 INIT 进程,该进程号始终是“1” 。INIT 进程根据其配置文件“/etc/inittab”主要完成系统的一系列初始化的任务。由于该配置文件是 INIT 进程执行的惟一依据,因此先对它的格式进行统一讲解。inittab 文件中除了注释行外,每一行都有如下格式:id:runlevels:action:process(1)id
id 是配置记录标识符,由 1~4 个字符组成,对于 getty 或 mingetty 等其他 login 程序项,要求 id 与 tty 的编号相同,否则 getty 程序将不能正常工作。(2)runlevels runlevels 是运行级别记录符,一般使用 0~6 以及 S 和 s。其中,0、1、6 运行级别为系统保留:0 作为 shutdown 动作,1 作为重启至单用户模式,6 为重启;S 和 s 意义相同,表示单用户模式,且无需 inittab 文件,因此也不在 inittab 中出现。7~9 级别也是可以使用的,传统的 UNIX 系统没有定义这几个级别。runlevel 可以是并列的多个值,对大多数 action 来说,仅当 runlevel 与当前运行级别匹配成功才会执行。(3)action action 字段用于描述系统执行的特定操作,它的常见设置有:initdefault、sysinit、boot、bootwait、respawn 等。 initdefault 用于标识系统缺省的启动级别。当 init 由内核激活以后,它将读取 inittab 中的initdefault 项,取得其中的 runlevel,并作为当前的运行级别。如果没有 inittab 文件,或者其中没有 initdefault 项,init 将在控制台上请求输入 runlevel。 sysinit、boot、bootwait 等 action 将在系统启动时无条件运行,忽略其中的 runlevel。 respawn 字段表示该类进程在结束后会重新启动运行。(4)process process 字段设置启动进程所执行的命令。以下结合笔者系统中的 inittab 配置文件详细讲解该配置文件完成的功能:1.确定用户登录模式在“/etc/inittab”中列出了如下所示的登录模式,主要有单人维护模式、多用户无网络模式、文字界面多用户模式、X-Windows 多用户模式等。其中的单人维护模式(run level 为 1)是类似于 Windows 中的“安全模式”,在这种情况下,系统不加载复杂的模式从而使系统能够正常启动。在这些模式中最为常见的是 3 或 5,其中本系统中默认的为 5,也就是 X-Windows多用户模式。 # Default runlevel. The runlevels used by RHS are:
# 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:5:initdefault: 2.执行内容/etc/rc.d/rc.sysinit在确定了登录模式之后,就要开始将 Linux 的主机信息读入 Linux 系统,其内容就是文件“/etc/rc.d/rc.sysinit”中的。查看此文件可以看出,在这里确定了默认路径、主机名称、“/etc/sysconfig/network”中所记录的网络信息等。
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit3.启动内核的外挂模块及各运行级的脚本在此,主要是选择模块的型态以进行驱动程序的加载。接下来会根据不同的运行级(runlevel)加载不同的模块,启动系统服务。 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.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" # If power was restored before the shutdown kicked in, cancel it.
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:5:respawn:/etc/X11/prefdm -nodaemon