LINUX是自由開源軟件,在LINUX里一切都是文件,不管是命令,操作等等都是以文件形式保存,這篇博客來記錄LINUX啟動時的引導流程是通過哪寫文件來完成的.
使用的LINUX版本是CentOS5,CentOS和Ubuntu都是自己聯(lián)系使用時的較理想版本.
下面以CentOS5.5版本為例,介紹LINUX的引導流程,具體流程如下:

下面詳細介紹每一步:
1)第一步firmware固件自檢,主要是進行CMOS/BIOS對硬件進行POST加電自檢,在物理層次上對硬件進行檢測是否正常。例如檢查硬盤是否插好等。
2)第二步讀取硬盤中MBR的BootLoader,自啟動程序,Linux下常用的自啟動程序是GRUB。這一步主要的功能是載入內(nèi)核。內(nèi)核存放在/boot目錄下
3)第三步就是載入的內(nèi)核Kernel的過程,
主要功能是:1、驅(qū)動硬件,Kernel中含有大量驅(qū)動程序。2、啟動init進程。
4)init進程,主要是讀取/etc/inittab文件,執(zhí)行缺省運行級別,從而繼續(xù)引導。需要注意的是init京城的PID恒為1,是所有進程的父進程,而init進程的負景程是0,為內(nèi)核調(diào)度器Kernel scheduler。
5)/etc/inittab 定義了初始化的操作。

命令主要格式是:id: runlevels : action : process
其中,如上圖紅框中所示
1、run-levels運行級別有7個,0—6分別如下:
0 —— halt 關機
1 —— Single user mode 單用戶模式
2 —— Multiuser,withoutNFS 多用戶模式但不帶網(wǎng)絡(text模式)
3 —— Full multiuser mode 完整功能的多用戶模式(text模式)
4 —— unused 預留
5 —— X11 圖形化多用戶模式
6 —— reboot 重啟
可以根據(jù)這7個運行級別來進行切換
命令為:查看當前運行級別 #runlevel、 切換運行級別 #init[0 |1 |2 |3 |4 |5 |6]
2、而acion中也有幾個比較重要的取值:
1 initdefault:指定系統(tǒng)缺省啟動的運行級別,如上圖中標出,通常用于修復,比如我們要進入單用戶模式,則可以將其設置為1,不可將默認設置為0或6,否則無法啟動.
2sysinit:系統(tǒng)啟動執(zhí)行process中指定的命令

由inittab文件內(nèi)容可以看出,沒有設置運行級別,即為無論是哪個運行級別,都會執(zhí)行/etc/rc.d/rc.sysinit
6)initdefault,如第五步所說到的,主要是讀取/etc/inittab中的信息,判斷缺省的運行級別是什么。
7)/etc/rc.d/rc.sysinit
在inittab文件中運行到第21行,變是啟動這個腳本。完成系統(tǒng)服務程序的啟動,如系統(tǒng)環(huán)境變量的設置、設置系統(tǒng)時鐘、加載字體、檢查加載文件系統(tǒng)、生成系統(tǒng)啟動信息日志文件等。由于是基礎服務,因為其run-level設置為空::即任何級別,action設置為sysinit。即該腳本在任何運行級別下都要啟動,以完成基礎服務的啟動
8)基礎服務啟動后,會執(zhí)行/etc/rc.d/rc這個腳本
加載完基礎服務后,就要根據(jù)不同的運行級別去啟動相對應的下的目錄,它的工作原理是先去判斷系統(tǒng)的默認運行級別即第6步中的東西,然后再執(zhí)行相應的rcN.d目錄下的服務啟動腳本如圖

9)執(zhí)行/etc/rc.d/rcN.d目錄下的服務啟動腳本
看下該目錄下的內(nèi)容:

其中S表示要啟動的腳本,K表示要關閉的腳本
數(shù)字表示啟動順序,數(shù)值小的優(yōu)先.主要是對一些服務的管理
在這一步里,需要說明一下/etc/rc.d/init.d這個目錄,這個目錄里放的腳本是真正的腳本,而rcN.d里放置的都是init.d目錄里的軟連接,也就是說所有rcN.d里的文件最終都需要來init.d里找真正的腳本
看一下具體細節(jié):


執(zhí)行到這一步,界面就會提示輸入用戶名和密碼了,也就是說系統(tǒng)已經(jīng)起來了,輸入用戶名和密碼的過程后面再說,這次的引導流程就結束了