本文以RED HAT LINUX9为范例介绍,其实大部分的LINUX都有相同的启动过程.
启动过程大致分为:
1)开机自检,读取MBR中的引导程序(比如,现在的GRUB,LILO引导器);
2)引导器根据用户所选择的系统,引导相应的操作系统,LINUX引导其内核程序;
3)LINUX内核负责启动系统的前期工作,加载INIT进程;(INIT是内核启动的第一个进程)
4)根据不同的运行级别,加载相应的服务;
5)最后,提示用户输入用户名和登录密码;
看看进程吧
一,init进程
init进程是系统引导运行的第一个进程,其是所有进程的祖先,其进程号(PID)永远都是"1".init进程按照
其配置文件,引导运行系统所需的其它进程.
我们看看init进程的配置文件
#more /etc/inittab
#
#inittab This file describes how the INIT process should set up
# the system in a certain run-level
#
#Author: Miquel van Smoorenburn,
# Modified for THS 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-Multiuer,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.
si::sysinit:/etc/rc.d/rc.sysinit
10:0:wait:/etc/rc.d/rc 0
11:1:wait:/etc/rc.d/rc 1
12:2:wait:/etc/rc.d/rc 2
13:3:wait:/etc/rc.d/rc 3
14:4:wait:/etc/rc.d/rc 4
15:5:wait:/etc/rc.d/rc 5
16:6:wait:/etc/rc.d/rc 6
#Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
pf::powerfail:/sbin/shutdown -f -h +2 "Power failure;System Shutting Down"
pr::12345:powerokwait:/sbin/shutdown -c "Power Restored;Shutdown Cancelled"
#Run gettys in standard rnlevels
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
分析一下INITTAB文件:
inittab是作为init进程的配置文件.用于描述一些系统启动时相应的运行级别和服务进程.
可以看到,inittab文件都有一个通用格式,为:
id:runlevel:action:process
id----用于在inittab文件惟一标识一个配置信息,可以有1~4个字符组成.
runlevel----指定配置信息在哪个运行级别上运行;
action---指定该条配置信息所要发生的动作.具体有以下几个动作:
1)initdefault--指定默认运行级别;
2)sysinit--表示此类进程在boot或bootwait类进程之前运行,运行级别字段被忽略.
3)wait---指定有进入指定运行级别后运行.
4)ctrlaltdel--这个大家很熟悉,重启作用.
5)powerfail,powerwait--指定UPS断电信号发生时所运行的命令.
6)respawn---在启动后重新运行(如控制台getty)
7)process---设置启动进程所进行的命令.
运行级别,一共有0~6六个运行级别,注意级别4没有指定使用.具体运行级别,在配置文件中已给出.
技巧:
#runlevel //查看当前运行级别.
N 3
#init n //n为运行级别,用这个命令可以转换运行级别.
看看系统初始化脚本:
inittab文件指定作用rc.sysinit作为系统初始化脚本.
#grep sysinit /etc/inittab
有兴趣的用户可以自行阅读.
linux在的独立进程与服务程序
以redhat linux 9为例,它的服务程序有两种:独立服务和受xinetd管理的服务程序.注意其实xinetd也是
作为一个独立进程来运行的.
linux中的每个服务都有相应的运行脚本,可用于设置启动,停止,重启和查询服务等信息;所有的服务脚本
都写在"/etc/rc.d/init.d"中,脚本名称和服务器名称相对应,大都有说明,大家可自己查看,
各运行级别的脚本目录所在位置为:/etc/rc.d当中可以看到以0~6加在RC的后面,构成了相应的运行级别服
务脚本目录.可进入相应级别的脚本目录,查看其有什么设置.比如,我们进入级别3有脚本目录:
这里只列出一行进行分析,可以看到每个服务目录都有一些明显的特点,前面有一个"K"代表"KILL"是指这个服务在这个级别被停止.若前面有一个"s"表示"Start",表示这个服务在这个运行级别被启动.在K或S的后面有一些数字,这是服务的序号,当启动服务时,按序号从小到大启动,当停止服务时,按序号从大到小停止.
#ls /etc/rc.d/rc3.d/
K05saslauthd K68ipsec K96pcmcia S17keytable S55sshd
使用SHELL命令来停止或者运行服务---service
#service xinetd stop //停止运行xinetd服务
Stopping xinetd:
#service xinetd start //启动xinetd服务
技巧:有的时候我们利用LINUX进行上网时,不能联网,其实有些时候是由于LINUX防火墙的原因,我们可能关闭防火墙,使用这个命:#service iptables stop
服务启动状态的配置命令:
1.
ntsysv
2. chkconfig,这个命令功能强大,看看吧:
查看服务启动状态:#CHKCONFIG --LIST [SERVICES]
E.G.:
#chkconfig --list //查看系统所有服务的启动状态.
#chkconfig --list syslog //查看syslog服务的启动状态.
设置独立服务的启动状态:#chkconfig --level
e.g.:
#chkconfig --level 123 syslog off //表示syslog这个服务在1,2,3停止运行.