Linux 啟動詳解1

2021-06-17 23:33:20 字數 3230 閱讀 4827

在了解啟動流程之前,我們應該先知道系統的幾個重要指令碼和配置檔案,他們對應的路徑為:

1. /sbin/init

2. /etc/inittab

3. /etc/rc.d/rc.sysinit

4. /etc/rc.d/rcn.d //這是幾個資料夾n代表數字1,2,3,4..

5. /etc/fstab

檔案介紹:

1.關於/sbin/init與/etc/inittab

關於/sbin/init ,它是乙個二進位制可執行檔案,為系統的初始化程式,而/etc/inittab是它的配置檔案,我們可以通過/etc/inittab來一睹 它的功能, 裡面的內容是一種固定的文字格式,id:runlevels:action:process

我們來通過它的內容來學習它之前,先了解寫執行級別的分類(0-6):

0: 關機 half

1: 單使用者模式 singel user

2: 多使用者模式 multi user , 不提供nfs服務 without nfs

3: 完全多使用者字元模式 full multiuser text mod

4: 系統預留 officially undefined

5: 圖形登入介面 graphical login

6: 重啟 reboot

2. 關於etc/rc.d/rc.sysyinit 和 /etc/rc.d/rc.nd

在inittab檔案中,我們了解到rc.sysinit是系統執行的第乙個指令碼,那麼它的作用都有哪些呢?如果有shell指令碼基礎的話可以用vim開啟這個檔案來看看,它有900多行...是linux裡最牛的指令碼,總結下它的作用,有如下幾點:(一定要牢記,必要時我們要重寫它!

1. 啟用udev和selinux

2. 通過讀取/etc/sysct1.conf來設定核心引數

3. 設定系統時鐘

4. 設定鍵盤對映

5. 啟動交換分割槽。

6. 設定主機名

7. 檢查跟檔案系統,並且如果沒有錯誤,以讀寫的方式來重新掛載檔案系統 (重要)

8. 啟用raid和lvm裝置

9. 啟動磁碟限額

10 掛載其他/etc/fstab裡定義的尚未被掛載的裝置

11. 清理過時的檔案鎖和pid檔案

12. 啟動服務/etc/rc.d/rcn.d

/etc/rc.d/rcn.d 是乙個存放了系統啟動是載入的服務的資料夾,通過inittab,我們知道了,它的編號對應相應的啟動執行級別。

需要說明的是,它裡面的檔案,以我的為例 以k開頭的代表stop,以s開頭的代表啟動start,數字越小,有限級別越高

3./etc/fstab檔案

它定義了系統初始化掛載的裝置,對系統的啟動至關重要,rc.sysinit通過讀取它來實現系統分割槽的掛載

簡單的流程圖

linux開機的基本流程:

1. 載入 bios 的硬體資訊; 

2. 讀取 mbr 的 kernel loader (亦即是 lilo, grub, spfdisk 等等)開機資訊; 

3. 載入 kernel 的作業系統核心資訊; 

4. kernel 執行 init 程式並取得 run-level 資訊; 

5. init 執行 /etc/rc.d/rc.sysinit 檔案; 

6. 啟用核心的外掛程式式模組 (/etc/modules.conf); 

7. init 執行 run-level 的各個批次檔( scripts ); 

8. init 執行 /etc/rc.d/rc.local 檔案; 

9. 執行 /bin/login 程式;

流程詳解:

1--查詢bios的基本資訊,了解整個系統的硬體狀態,比如cpu,記憶體,顯示卡,網絡卡等。

2--讀取主機mbr(硬碟的第乙個扇區)的boot loader. windows不支援linux的分割槽格式.所以,用windows的boot.ini是查不到linux的系統的.一般我裝系統都是先裝windows再裝linux,然後用grub來做boot loader

3--載入核心資訊,在grub中選擇linux系統之後,主機就會跑到linux所在的硬碟下面載入linux的核心資訊。通常都在目錄/boot下面,

4--執行init程式,也就是 sbin/init程式,這個程式會呼叫/etc/inittabd的資訊並獲得run-level等級,(等級分類上面已經介紹過了)

init程序是系統所有程序的起點,它的程序號為1,init程序是所有程序的發起者和控制者。如果init程序出現了問題,那麼系統將不可用。init的程序的作用有兩個,一是扮演程序之父,系統中任何程序都作為它的子程序並以它作為參照;二是通過inittab檔案管理run-level執行級別。

5--執行/etc/rc.d/rc.sysinit指令碼,/etc/rc.d/rc.sysinit是init程式執行的第乙個指令碼,它的作用是初始化linux系統、配置環境,例如

(1)設定網路環境,/etc/sysconfig/network,比如主機,閘道器,dns

(2)掛載/proc,此檔案是乙個特殊的檔案,大小為0,因為它的位置是在記憶體中。

(3)設定時間,設定字型等。。。

6--由於我們的核心越來越聰明,所以呢,我們可以選擇使用模組的型態 ( 這個在後面也會繼續說明 ) 來進行驅動程式的載入!那麼如果系統原本找不到的模組 ( 例如早期的 via-rhine 晶元組 ) 就可以在這個檔案裡面 /etc/modules.conf 寫入呢!(不一定非要單獨列出)

7--init執行相應的run-level等級的指令碼,rcx.d中的指令碼有的是以s開頭,有的是以k開頭,指令碼執行的順序是從小到大首先終止以k開頭的服務,然後啟動以s開頭的服務。到/etc/rc.d目錄中,不同的level會有不同的目錄.如啟動3模式,會有個rc3.d目錄,裡面就儲存著服務.其中,s(start)開頭的表明開機啟動,k(kill)開頭的表明開機不啟動.數字表示啟動順序.數字越小,啟動越早.

8--執行rc.lcoal指令碼,一般情況下,/etc/rc.d/rc.local是作為初始化指令碼的最後乙個檔案,所以在開機的時候,如果我們想啟動某個服務,我們可以在這個檔案中新增一些執行的指令碼命令,比如說crond服務、httpd服務隨機器啟動時而啟動等

9--執行/bin/login程式

login程式會提示使用者輸入使用者名稱和密碼,並會檢查輸入的正確與否,正確將為使用者初始化環境,並將控制權交給shell。

有興趣的可以了解更詳細的過程:linux啟動詳解2 

linux 自啟動詳解

最後自己補充一些 1.許多網路服務都由超級服務 etc rc.d init.d xinetd啟動,這些服務的配置檔案在 etc xinetd.d 目錄下,如telnet就是由xinetd啟動的,其配置檔案如下 fc7 1 default on 2 description the telnet ser...

linux啟動流程 (1)

啟動流程一覽 1.載入bios的硬體資訊與進行自我測試,並依據設定取得第乙個可啟動的裝置 2.讀取並執行第乙個啟動裝置內mbr的boot loader 也就是grub,spfdisk等程式 3.依據boot loader的設定載入kernel,kernel會開始檢測硬體與載入驅動程式 4.在硬體驅動...

Linux自啟動設定詳解

linux 自啟動設定詳解 linux有自己一套完整的啟動體系,抓住了linux啟動的脈絡,linux的啟動過程將不再神秘。本文中假設inittab中設定的init tree為 etc rc.d rc0.d etc rc.d rc1.d etc rc.d rc2.d etc rc.d rc3.d e...