LINUX是自由开源软件,在LINUX里一切都是文件,不管是命令,操作等等都是以文件形式保存,这篇博客来记录LINUX启动时的引导流程是通过哪写文件来完成的.
使用的LINUX版本是CentOS5,CentOS和Ubuntu都是自己联系使用时的较理想版本.
下面以CentOS5.5版本为例,介绍LINUX的引导流程,具体流程如下:
下面详细介绍每一步:
1)第一步firmware固件自检,主要是进行CMOS/BIOS对硬件进行POST加电自检,在物理层次上对硬件进行检测是否正常。例如检查硬盘是否插好等。
2)第二步读取硬盘中MBR的BootLoader,自启动程序,Linux下常用的自启动程序是GRUB。这一步主要的功能是载入内核。内核存放在/boot目录下
3)第三步就是载入的内核Kernel的过程,
主要功能是:1、驱动硬件,Kernel中含有大量驱动程序。2、启动init进程。
4)init进程,主要是读取/etc/inittab文件,执行缺省运行级别,从而继续引导。需要注意的是init京城的PID恒为1,是所有进程的父进程,而init进程的负景程是0,为内核调度器Kernel scheduler。
5)/etc/inittab 定义了初始化的操作。
命令主要格式是:id: runlevels : action : process
其中,如上图红框中所示
1、run-levels运行级别有7个,0—6分别如下:
0 —— halt 关机
1 —— Single user mode 单用户模式
2 —— Multiuser,withoutNFS 多用户模式但不带网络(text模式)
3 —— Full multiuser mode 完整功能的多用户模式(text模式)
4 —— unused 预留
5 —— X11 图形化多用户模式
6 —— reboot 重启
可以根据这7个运行级别来进行切换
命令为:查看当前运行级别 #runlevel、 切换运行级别 #init[0 |1 |2 |3 |4 |5 |6]
2、而acion中也有几个比较重要的取值:
1 initdefault:指定系统缺省启动的运行级别,如上图中标出,通常用于修复,比如我们要进入单用户模式,则可以将其设置为1,不可将默认设置为0或6,否则无法启动.
2sysinit:系统启动执行process中指定的命令
由inittab文件内容可以看出,没有设置运行级别,即为无论是哪个运行级别,都会执行/etc/rc.d/rc.sysinit
6)initdefault,如第五步所说到的,主要是读取/etc/inittab中的信息,判断缺省的运行级别是什么。
7)/etc/rc.d/rc.sysinit
在inittab文件中运行到第21行,变是启动这个脚本。完成系统服务程序的启动,如系统环境变量的设置、设置系统时钟、加载字体、检查加载文件系统、生成系统启动信息日志文件等。由于是基础服务,因为其run-level设置为空::即任何级别,action设置为sysinit。即该脚本在任何运行级别下都要启动,以完成基础服务的启动
8)基础服务启动后,会执行/etc/rc.d/rc这个脚本
加载完基础服务后,就要根据不同的运行级别去启动相对应的下的目录,它的工作原理是先去判断系统的默认运行级别即第6步中的东西,然后再执行相应的rcN.d目录下的服务启动脚本如图
9)执行/etc/rc.d/rcN.d目录下的服务启动脚本
看下该目录下的内容:
其中S表示要启动的脚本,K表示要关闭的脚本
数字表示启动顺序,数值小的优先.主要是对一些服务的管理
在这一步里,需要说明一下/etc/rc.d/init.d这个目录,这个目录里放的脚本是真正的脚本,而rcN.d里放置的都是init.d目录里的软连接,也就是说所有rcN.d里的文件最终都需要来init.d里找真正的脚本
看一下具体细节:
执行到这一步,界面就会提示输入用户名和密码了,也就是说系统已经起来了,输入用户名和密码的过程后面再说,这次的引导流程就结束了