本文包括
3部分內容1、
linux
的引導過程2、
執行級別3、
/etc/rc.d/
與/etc/rc.d/init.d
的關係都僅限於自身的理解,如有差錯和不足的地方請指正和補充!一起學習,一起進步。
「/etc/rc.d/init.d/
目錄下的指令碼就類似與
windows
中的登錄檔,在系統啟動的時候某些指定指令碼將被執行」。開始之前,先引用李善明經理昨天晚上總結時的乙個理解,讓大家先對
init.d
目錄有個大概的印象。在進入
init.d
之前,我們一起來做兩個準備工作,
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
,否則將一直在重啟
)這是兩個表較常用執行級別
(後期補上
),左圖
redhat9 級別3
啟動的將是文字介面,右圖
fc7級別
5啟動的將是圖形介面。
三、/etc/rc.d/
與/etc/rc.d/init.d
的關係寫到這裡,應該差不多要進入
init.d
了,可是我覺得單寫
/etc/rc.d/init.d
的話不一定能說得清楚明白,就拿它跟
/etc/rc.d
這個它上一級的目錄一起來討論,可能比較合適一些,因為他們之間有著千絲萬縷的關係。
在這裡先解釋一下
init.d
裡面放的都是什麼東西。這個目錄存放的是一些指令碼,一般是
linux
以rpm
包安裝時設定的一些服務的啟動指令碼。系統在安裝時裝了好多
rpm包,這裡面就有很多對應的指令碼。執行這些指令碼可以用來啟動,停止,重啟這些服務。
前面說到,
/etc/rc.d/init.d
這個目錄下的指令碼就類似與
windows
中的登錄檔,在系統啟動的時候執行。程式執行到這裡
(init
程序讀取了執行級別
),相信從命名的角度大家也能猜到該執行
/etc/rc.d/init.d
裡面的指令碼了,不然它為什麼也叫
init(.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
裡的指令碼。
redhat9 lsfc7ls -l
這樣看的就很清楚了。
到這裡,估計大家可能都比較清楚了,我開始也以為是這樣的。可是後來我仔細看過和比較這些鏈結檔案和
init.d
裡真正被執行的指令碼的檔名之後,一直有幾個問題沒弄明白。藉著寫這個文章的機會,我做了一些功課,總算是大概解開了那些疑惑。
1、這些鏈結檔案前面為什麼會帶乙個
kxx或者
sxx呢?
是這樣的,帶
k的表示停止
(kill)
乙個服務,
s表示開啟
(start)
的意思2、k
和s後面帶的數字呢?幹什麼用的
這個我開始的時候還以為是排列起來好看或者數數用呢。後來發現不是的。它的作用是用來排序,就是決定這些指令碼執行的順序,數值小的先執行,數值大的後執行。很多時候這些執行順序是很重要的,比如要啟動
apache
服務,就必須先配置網路介面,不然乙個沒有
ip的機子來啟動
服務那豈不是很搞笑。。。
3、無意中我發現同乙個服務帶
s的和帶
k的鏈結到
init.d
之後是同乙個指令碼。我就納悶了,為什麼會是執行同乙個指令碼呢?
這個時候真是s和
k的妙用了,原來s和
k並不止是用來看起來分的清楚而已。s給和
k還分別給
init.d
下面的指令碼傳遞了
start
和stop
的引數。哦,是這樣的
(煥然大悟的樣子,呵呵
)!這時我才想起來原來曾經無數用過的
/etc/rc.d/init.d/network restart
命令。原來傳
s時相當於執行了
/etc/rc.d/init.d/*** start
這條命令,當然
k就相當於
/etc/rc.d/init.d/*** stop
了
Linux中關於init d分析
本文包括3部分內容 1 linux的引導過程 2 執行級別 3 etc rc.d 與 etc rc.d init.d的關係 都僅限於自身的理解,如有差錯和不足的地方請指正和補充!一起學習,一起進步。etc rc.d init.d 目錄下的指令碼就類似與windows中的登錄檔,在系統啟動的時候某些指...
Linux系統執行級別和init d指令碼
一 概述 etc init.d目錄下包含的指令碼檔案,在系統 啟動時或更改執行級別時由init程序執行。在 etc rc?d目錄下的符號鏈結檔案的名字命名規則是 s mmscript 或者k mmscript mm是兩位數,script是指令碼的名字,這個名字和其指向在init.d目錄下真正的指令碼...
檔案和目錄(理解)
位於 home user,稱之為使用者工作目錄或家目錄,表示方式 home user bin usr bin 可執行二進位制檔案的目錄,如常用的命令 ls tar mv cat 等 boot 放置 linux 系統啟動時用到的一些檔案,如 linux 的核心檔案 boot vmlinuz,系統引導管...