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

Logo

更多推荐