1、首先要确保在root管理权限下(不然你在修改配置的时候会告诉你readonly,对你修改的内容无法保存起来,这样你就很纳闷。)
2、/etc/inittab
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# 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:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
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
从注释的内容可以看出该文件主要定义系统的各个启动级别上应该运行的程序,系统默认的运行级别有7个,分别是0-6。
当前机器的运行级别可以通过命令runlevel来查看。
对该文件的理解:
文件中的每一行都被三个冒号分隔成4个部分,每个部分有不同的含义:
(1)第一个冒号前面的数字或者字符是该行的行标识符,该文件中每行的行标识符都不一样。
(2)第一个冒号后面是该行的状态标识符,代表init进程的运行状态,在linux中的规定是0,1,2,3, 4,5,6,每个值对应的含义注释部分有详细的说明。如果为空,则对任何级别都有效。
(3)第二个冒号的后面是该行的动作标识符,表示init进程运行一个可执行文件的方式。在linux中规定了多种方式。部分说明如下:
once:在执行本行第四部分中的命令或者程序时,init不必等待执行这些命令的进程完成,可以立即执 行下面的循环;
wait:在执行本行第四部分中的命令或者程序时,init必须等待执行这些命令的进程完成后,才能进行 下面一行的操作;
respwan:表示如果本行的命令进程终止后,init进程应该马上重新启动相应的进程;
sysinit:init进程启动后,最先执行动作标识符为sysinit行的命令或可执行程序。而其他标有boot或 bootwait行的命令要等到sysinit行的命令或可执行程序终止后才能执行;
ctrlaltdel:当Ctrl+Alt+Del被同时按下时,init进程将接收到系统发送的SIGINT信号,马上执行本行的 shutdown命令,关闭系统;
initdefault:指定系统启动时,该行的运行状态为init进程被调用时的默认运行状态。如果在该文件中没 有initdefault状态项,则启动时init将询问用户以什么方式运行。
(4)在第三个冒号后面是init进程要执行的shell命令或者可执行文件。每行的shell命令或可执行文件是否被执行取决于没行的“状态“和”动作“。从init进程的执行流程可知,init进程先创建一个shell进程,再由该shell去执行相应的命令。
下面分析inittab是怎么被执行的:
(1)id:5:initdefault: 说明系统默认的启动级别是5。所以系统启动之后会进入X Window模式。
(2)# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit 该行的状态标识符为空,所以每个运行级别都要执行系统初始化脚步文件/etc/rc.d/rc.sysinit。
(3)由于init启动后计入运行级别5,所以在下面的几行中init将执行行标识符为l5的命令,该命令是/etc/rc.d/rc.5中的各个命令。
(4)当init进程执行/etc/rc.d/rc.5结束后,整个系统的初始化工作已经完成,系统已经能够正常工作。为了让用户能够使用计算机,init进程在最后会反复生产若干个终端进程getty, getty进程通过系统调用exec执行注册程序login,允许用户注册登录,注册成功时,login程序通过系统调用exec执行注册shell,这时使用终端的用户就可以开始工作了!