Linux啟動過程
redhat的啟動方式和執行次序是:
加載內核
執行init程序
/etc/rc.d/rc.sysinit # 由init執行的第一個腳本
/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL為缺省的運行模式
/etc/rc.d/rc.local
/sbin/mingetty # 等待用戶登錄
init在等待/etc/rc.d/rc執行完畢之后(因為在/etc/inittab中/etc/rc.d/rc的action是wait),將在指定的各個虛擬終端上運行/sbin/mingetty,等待用戶的登錄。
至此,Linux的啟動結束。
Linux的引導過程
系統啟動之后,在進入 init.d之前,我們先來看看系統都做了什么工作.
系統加電之后,首先進行的硬件自檢,然后是bootloader對系統的初始化,加載內核。內核被加載到內存中之后,就開始執行了。一旦內核啟動運行,對硬件的檢測就會決定需要對哪些設備驅動程序進行初始化。從這里開始,內核就能夠掛裝根文件系統(這個過程類似于Windows識別并存取C盤的過程)。內核掛裝了根文件系統,并已初始化所有的設備驅動程序和數據結構等之后,就通過啟動一個叫 init的用戶級程序,完成引導進程。
運行級別(run level)
init進程是系統啟動之后的第一個用戶進程,所以它的pid(進程編號)始終為1。init進程上來首先做的事是去讀取/etc/目錄下inittab 文件中initdefault id值,這個值稱為運行級別(run-level)。它決定了系統啟動之后運行于什么級別。運行級別決定了系統啟動的絕大部分行為和目的。這個級別從0到 6 ,具有不同的功能。不同的運行級定義如下:
# 0 – 停機(千萬別把initdefault設置為0,否則系統永遠無法啟動)
# 1 – 單用戶模式
# 2 – 多用戶,沒有 NFS
# 3 – 完全多用戶模式(標準的運行級)
# 4– 系統保留的
# 5 – X11 (x window)
# 6 – 重新啟動 (千萬不要把initdefault 設置為6,否則將一直在重啟)
常用的是2、3、5。
Linux啟動目錄
/etc/rc.d/ 包括rc.d, rcx.d目錄和rc.sysinit, rc, rc.local三個腳本文件。
/etc/rc.d/init.d/存放啟動時要運行的腳本(一般為linux以rpm包安裝時設定的一些服務的啟動腳本),在系統啟動的時候某些指定腳本將被執行。
/etc/rc.d/rcx.d/ 各啟動級別對應的啟動目錄,存放鏈接到init.d目錄下腳本的符號鏈接(軟鏈接),指定特定啟動級別下哪些腳本被運行。x為啟動級別,0-6。
/etc/rc.d/init.d這個目錄下的腳本在系統啟動的時候執行,但不是全部都執行,而是有選擇的執行,因為系統并不需要啟動所有的服務。
那么,系統是如何選擇哪些需要啟動哪些不要呢?這時剛才說的運行級別就起作用了。在決定了系統啟動的run level之后,/etc/rc.d/rc這個腳本先執行。在RH9和FC7的源碼中它都是一上來就check_runlevel()(雖然實現的代碼不一樣,也大同小異),知道了運行級別之后,對于每一個運行級別,在rc.d下都有一個子目錄分別是rc0.d,rc1.d ….. rc6.d。每個目錄下都是到init.d目錄的一部分腳本一些鏈接。每個級別要執行哪些服務就在相對應的目錄下,比如級別5要啟動的服務就都放在rc5.d下,但是放在這個rc5.d下的都是一些鏈接文件,鏈接到init.d中相對應的文件,真正運行的是init.d里的腳本。
以下是rcx.d目錄下符號鏈接名稱的一些說明:
1、鏈接文件前面為什么會帶一個Kxx或者Sxx呢?
帶K的表示停止(Kill)一個服務,S表示開啟(Start)的意思,凡是以Kxx開頭的,都以stop為參數來調用;凡是以Sxx開頭的,都以start為參數來調用。調用的順序按xx從小到大來執行。
2、K和S后面帶的數字呢?干什么用的
數字的作用是用來排序,就是決定這些腳本執行的順序,數值小的先執行,數值大的后執行。很多時候這些執行順序是很重要的,比如要啟動Apache服務,就必須先配置網絡接口
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
