Linux中init.d目錄詳解
/etc/init.d 是 /etc/rc.d/init.d 的軟連結(soft link)。可以透過 ll
命令檢視,如下:
init.d指的是/etc/rc.d/init.d目錄。
本文包括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 ls
fc7 ls -l
這樣看的就很清楚了。
到這裡,估計大家可能都比較清楚了,我開始也以為是這樣的。可是後來我仔細看過和比較這些連結檔案和init.d裡真正被執行的指令碼的檔名之後,一直有幾個問題沒弄明白。藉著寫這個文章的機會,我做了一些功課,總算是大概解開了那些疑惑。
1、這些連結檔案前面為什麼會帶一個Kxx或者Sxx呢?
是這樣的,帶K的表示停止(Kill)一個服務,S表示開啟(Start)的意思
2、K和S後面帶的數字呢?幹什麼用的
這個我開始的時候還以為是排列起來好看或者數數用呢。後來發現不是的。它的作用是用來排序,就是決定這些指令碼執行的順序,數值小的先執行,數
值大的後執行。很多時候這些執行順序是很重要的,比如要啟動Apache服務,就必須先配置網路介面,不然一個沒有IP的機子來啟動http服務那豈不是
很搞笑。。。
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/xxx
start這條命令,當然K就相當於/etc/rc.d/init.d/xxx stop了
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-1981633/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux 目錄詳解Linux
- linux目錄詳解Linux
- Linux建立目錄 mkdir 詳解(全)Linux
- Linux CentOS7 系統目錄詳解LinuxCentOS
- Linux系統下各個目錄的作用詳解!Linux
- AndroidSDK的目錄詳解Android
- windows臨時目錄詳解Windows
- Linux 目錄結構及詳細操作Linux
- 8.var目錄下的檔案和目錄詳解
- Linux中返回上一級目錄和返回根目錄命令Linux
- 如何在 Linux 中刪除目錄Linux
- Linux程式開發中如何判斷目錄是否為根目錄?Linux
- 11_Linux目錄結構講解Linux
- 【Linux基礎】Linux目錄Linux
- 如何獲取 Linux 中的目錄大小Linux
- Linux系統中什麼是父目錄?如何檢視父目錄?Linux
- Linux中操作工作目錄和檔案目錄Linux
- JuiceFS 目錄配額功能設計詳解UI
- 瀚高資料庫data目錄詳解資料庫
- linux部落格目錄Linux
- Linux批量建立目錄Linux
- linux 目錄及其作用Linux
- linux 壓縮目錄並排除某個目錄Linux
- linux中iptables詳解Linux
- Linux 中刪除目錄的多種方法Linux
- Linux中檔案與目錄的區別Linux
- Nginx目錄結構與配置檔案詳解Nginx
- vue-cli 目錄結構詳細講解Vue
- Linux中什麼是工作目錄?linux cd命令如何使用?Linux
- Linux解壓檔案到指定目錄的方法Linux
- 題解目錄
- Linux系統中net目錄有什麼用?Linux
- 在Linux中,目錄結構是怎樣的?Linux
- 在 Linux 中如何歸檔檔案和目錄Linux
- 在Linux中,什麼是家目錄?如何更改使用者的家目錄?Linux
- Linux核心原始碼目錄Linux原始碼
- Linux 檔案與目錄Linux
- 0、Linux學習 - 目錄Linux
- linux的目錄結構Linux