詳細解析 Linux init 進程、運行級別定義、/etc/inittab 配置結構、telinit 動態切換級別、Grub/LILO 啟動時指定級別、單用戶模式進入技巧。
init (PID 1) 是核心啟動後啟動的第一個用戶態進程,負責依運行級別啟動所有服務。核心會在 /sbin/init、/etc/init、/bin/init、/bin/sh 依序尋找,找不到則 kernel panic。
| 級別 | 名稱 | 說明 |
|---|---|---|
| 0 | 停機 | 系統關機,**不可設為 initdefault** |
| 1 | 單用戶模式 | 維護模式,掛載根分區唯讀,無網路 |
| 2 | 多用戶無 NFS | 多用戶,但不啟動 NFS 服務 |
| 3 | 完全多用戶模式 | 標準字元介面運行級別 (伺服器常用) |
| 4 | 保留 | 未使用,可自訂 |
| 5 | X11 圖形介面 | 啟動圖形登入管理器 (桌面常用) |
| 6 | 重啟 | 系統重啟,**不可設為 initdefault** |
另有 a、b、c 三個按需運行級別,RedHat 系列未使用。
id:runlevels:action:process
123 表 1,2,3 皆執行)。respawn(守護重啟)、wait(執行並等待)、once(執行一次)、boot/bootwait(開機執行)、initdefault(預設級別)、sysinit(系統初始化)、ctrlaltdel(三指鍵重啟) 等。範例:12:2:wait:/etc/init.d/rc 2 → 在級別 2 執行 /etc/init.d/rc 2 並等待結束。
/sbin/telinit 3 # 切換至級別 3 (關閉 X)
/sbin/telinit 5 # 切換至級別 5 (啟動 X)
切換前請儲存圖形介面下的工作,過程中會顯示服務啟動/停止訊息。
LILO: linux 3kernel /vmlinuz ro root=/dev/hda1 3編輯 kernel 參數:
kernel /vmlinuz-2.6.9-22.EL ro root=/bin/sh
直接啟動 /bin/sh 繞過 init,無任何服務啟動,極乾淨的維護環境。
ctrlaltdel 在 inittab 中可自訂為忽略、列印訊息或其他腳本。/etc/rc.d/init.d/,透過 ln 連結至 /etc/rc.d/rc[0-6].d/,K 開頭停止、S 開頭啟動,數字決定順序。