Linux太伟大了,什么东西都可以由你来做主,Linux加载完内核后,所有的其他系统服务,进程,都是靠脚本来加载的。所以Linux是这么的透明,你可以清除的指导你的系统做了什么。
下面我就对Linux的启动脚本做了注释,该脚本是属于LFS的,因为该系统比较小,所以可以很清楚的看清楚框架。其他的发行版本的脚本,肯定也会有所不同,但是大框架还是差不多的。
首先对整体流程,叙述一遍。要想了解整体流程,看/etc/inittab就可以了,启动过程全是依赖于该配置文件。
1
.
由引导程序
(
grub
)
加载内核,内核初始化
2
.
由内核调用初始化程序由内核参数 init
=
""
指定,默认为
"
/sbin/init
"
3
.
init依照
"
/etc/inittab
"
,
启动系统
先执行 K 开头的(按从低到高),再执行S开头的(从低到高)
------------------------------------------------------------------------------
#
默认为6个运行级别,加上一个系统初始化脚本,同过传递参数给rc脚本,来运行各个级别的初始化,个级别的脚本放在
"
/etc/rc.d/rcX.d
"
.
#
"
/etc/rc.d/rcX.d
"
中的脚本都为
/
etc
/
rc
.
d
/
init
.
d中的链接文件,脚本命名为 Sxxxx和Kxxxx
,
S为start,,K为Stop
,
xxxx为数字,是调用的顺序,从小到大,由rc传递个给该脚本,并按顺序调用
.
#
"
/etc/rc.d/init.d
"
中的脚本
,
都可以接受三种参数start
,
stop
,
restart
.
#
记录格式
#
id
:rstate:action:process
#
id: 4个字符的唯一标识
#
rstate: 被调用的运行级别
,
可以为多个级别,为空则是所有级别
#
action: 执行的动作。
#
respawn: 如果该进程不存在,则运行,并继续扫描inittab,执行其他项目。如果改进程结束,init将,重启该进程
#
wait: 运行该进程,并等待结束,在处理其他记录
#
once: 运行该进程,并继续其他记录,进程中止了也不在运行
#
sysinit: 只有在启动或重启并首先进入单用户模式时调用。并等待结束,不指定运行界别
#
initdefault: 指定默认级别,如果没指定,则要求用户指定一个
#
ctrlaltdel: 同时按下ctrl
+
alt
+
del键执行
#
boot
: 系统启动时调用,并继续其他记录,进程中止,不在运行
#
bootwait: 第一次从单用户到多用户模式时调用,并等待结束,中止不再运行
#
powerfail: 当接到断电信号
(
SIGPWR
)
, 运行
#
powerwait: 同上,并等待结束
#
off
: 如果指定进程存在,则向它发出SIGTERM
#
ondemand: 同respawn
,
但与运行级别无关,只用于a
,
b
,
c字段
#
process: 指定要运行的进程
#
Begin
/
etc
/
inittab
id:
3
:initdefault
:
#
默认初始化级别
si
::
sysinit:/etc/rc.d/init.d/rc sysinit # 系统初始化运行的脚本
10
:
0
:wait
:
/
etc
/
rc
.
d
/
init
.
d
/
rc
0
#
0
-6运行界别 0为关机,6为重启,1为单用户,3为多用户,5为x
11
:S1:wait
:
/
etc
/
rc
.
d
/
init
.
d
/
rc
1
12
:
2
:wait
:
/
etc
/
rc
.
d
/
init
.
d
/
rc
2
13
:
3
:wait
:
/
etc
/
rc
.
d
/
init
.
d
/
rc
3
14
:
4
:wait
:
/
etc
/
rc
.
d
/
init
.
d
/
rc
4
15
:
5
:wait
:
/
etc
/
rc
.
d
/
init
.
d
/
rc
5
16
:
6
:wait
:
/
etc
/
rc
.
d
/
init
.
d
/
rc
6
ca:
12345
:ctrlaltdel
:
/
sbin
/
shutdown -t1 -a -r now
#
ctrl
+
alt
+
del时,重启
su
:S016:once
:
/
sbin
/
sulogin
#
?
1
:
2345
:respawn
:
/
sbin
/
agetty tty1
9600
#
控制台,agetty初始化控制台,然后调用login程序,当用户退出时,重新调用agetty
2
:
2345
:respawn
:
/
sbin
/
agetty tty2
9600
3
:
2345
:respawn
:
/
sbin
/
agetty tty3
9600
4
:
2345
:respawn
:
/
sbin
/
agetty tty4
9600
5
:
2345
:respawn
:
/
sbin
/
agetty tty5
9600
6
:
2345
:respawn
:
/
sbin
/
agetty tty6
9600
#
End
/
etc
/
inittab
------------------------------------------------------------------------------
------------------------------------------------------------------------------
init初始化的脚本过程
所有启动脚本
/
etc
/
rc
.
d
/
init
.
d
/
运行级别控制函数
/
etc
/
rc
.
d
/
init
.
d
/
function
主要运行级别控制脚本
/
etc
/
rc
.
d
/
init
.
d
/
rc
rc脚本配置
/
etc
/
sysconfig
/
rc 设置启动脚本的目录,运行级别控制函数脚本目录位置,网络配置目录
------------------------------------------------------------------------------
由inittab指定运行agetty,agetty运行login程序,等待登录
启动 login
shell
(默认是
/
bin
/
sh),并执行 ~
/.
bashprofile
~
/.
bashprofile 会自动执行 ~
/.
bashrc ,而 ~
/.
bashrc 又调用
/
etc
/
bashrc