LINUX是自由開源軟件,在LINUX里一切都是文件,不管是命令,操作等等都是以文件形式保存,這篇博客來記錄LINUX啟動時(shí)的引導(dǎo)流程是通過哪寫文件來完成的.
使用的LINUX版本是CentOS5,CentOS和Ubuntu都是自己聯(lián)系使用時(shí)的較理想版本.
下面以CentOS5.5版本為例,介紹LINUX的引導(dǎo)流程,具體流程如下:
下面詳細(xì)介紹每一步:
1)第一步firmware固件自檢,主要是進(jìn)行CMOS/BIOS對硬件進(jìn)行POST加電自檢,在物理層次上對硬件進(jìn)行檢測是否正常。例如檢查硬盤是否插好等。
2)第二步讀取硬盤中MBR的BootLoader,自啟動程序,Linux下常用的自啟動程序是GRUB。這一步主要的功能是載入內(nèi)核。內(nèi)核存放在/boot目錄下
3)第三步就是載入的內(nèi)核Kernel的過程,
主要功能是:1、驅(qū)動硬件,Kernel中含有大量驅(qū)動程序。2、啟動init進(jìn)程。
4)init進(jìn)程,主要是讀取/etc/inittab文件,執(zhí)行缺省運(yùn)行級別,從而繼續(xù)引導(dǎo)。需要注意的是init京城的PID恒為1,是所有進(jìn)程的父進(jìn)程,而init進(jìn)程的負(fù)景程是0,為內(nèi)核調(diào)度器Kernel scheduler。
5)/etc/inittab 定義了初始化的操作。
命令主要格式是:id: runlevels : action : process
其中,如上圖紅框中所示
1、run-levels運(yùn)行級別有7個(gè),0—6分別如下:
0 —— halt 關(guān)機(jī)
1 —— Single user mode 單用戶模式
2 —— Multiuser,withoutNFS 多用戶模式但不帶網(wǎng)絡(luò)(text模式)
3 —— Full multiuser mode 完整功能的多用戶模式(text模式)
4 —— unused 預(yù)留
5 —— X11 圖形化多用戶模式
6 —— reboot 重啟
可以根據(jù)這7個(gè)運(yùn)行級別來進(jìn)行切換
命令為:查看當(dāng)前運(yùn)行級別 #runlevel、 切換運(yùn)行級別 #init[0 |1 |2 |3 |4 |5 |6]
2、而acion中也有幾個(gè)比較重要的取值:
1 initdefault:指定系統(tǒng)缺省啟動的運(yùn)行級別,如上圖中標(biāo)出,通常用于修復(fù),比如我們要進(jìn)入單用戶模式,則可以將其設(shè)置為1,不可將默認(rèn)設(shè)置為0或6,否則無法啟動.
2sysinit:系統(tǒng)啟動執(zhí)行process中指定的命令
由inittab文件內(nèi)容可以看出,沒有設(shè)置運(yùn)行級別,即為無論是哪個(gè)運(yùn)行級別,都會執(zhí)行/etc/rc.d/rc.sysinit
6)initdefault,如第五步所說到的,主要是讀取/etc/inittab中的信息,判斷缺省的運(yùn)行級別是什么。
7)/etc/rc.d/rc.sysinit
在inittab文件中運(yùn)行到第21行,變是啟動這個(gè)腳本。完成系統(tǒng)服務(wù)程序的啟動,如系統(tǒng)環(huán)境變量的設(shè)置、設(shè)置系統(tǒng)時(shí)鐘、加載字體、檢查加載文件系統(tǒng)、生成系統(tǒng)啟動信息日志文件等。由于是基礎(chǔ)服務(wù),因?yàn)槠鋜un-level設(shè)置為空::即任何級別,action設(shè)置為sysinit。即該腳本在任何運(yùn)行級別下都要啟動,以完成基礎(chǔ)服務(wù)的啟動
8)基礎(chǔ)服務(wù)啟動后,會執(zhí)行/etc/rc.d/rc這個(gè)腳本
加載完基礎(chǔ)服務(wù)后,就要根據(jù)不同的運(yùn)行級別去啟動相對應(yīng)的下的目錄,它的工作原理是先去判斷系統(tǒng)的默認(rèn)運(yùn)行級別即第6步中的東西,然后再執(zhí)行相應(yīng)的rcN.d目錄下的服務(wù)啟動腳本如圖
9)執(zhí)行/etc/rc.d/rcN.d目錄下的服務(wù)啟動腳本
看下該目錄下的內(nèi)容:
其中S表示要啟動的腳本,K表示要關(guān)閉的腳本
數(shù)字表示啟動順序,數(shù)值小的優(yōu)先.主要是對一些服務(wù)的管理
在這一步里,需要說明一下/etc/rc.d/init.d這個(gè)目錄,這個(gè)目錄里放的腳本是真正的腳本,而rcN.d里放置的都是init.d目錄里的軟連接,也就是說所有rcN.d里的文件最終都需要來init.d里找真正的腳本
看一下具體細(xì)節(jié):
執(zhí)行到這一步,界面就會提示輸入用戶名和密碼了,也就是說系統(tǒng)已經(jīng)起來了,輸入用戶名和密碼的過程后面再說,這次的引導(dǎo)流程就結(jié)束了