系統啟動和引導過程
當打開 Linux 計算機時會發生什麼?
在幾乎每種 Linux 配置中,引導過程都可以分為 9 個步驟:
安裝好根文件系統之後,就可以開始初始化了。
實際上,此後的所有引導過程完全由文件 /etc/inittab 的內容控制。具體來說,腳本和工具一般按照某些約定運行,但是理論上完全可以通過修改 /etc/inittab 來運行不同的腳本。
/etc/inittab 中的一個特定設置特別關鍵。這一行像下面這樣:
id:5:initdefault:
這一行一般出現在接近文件頂部的地方,它設置運行級別。運行級別控制 /etc/inittab 腳本其余部分中采取的操作。
在處理 /etc/inittab 腳本時發生了什麼?具體來說,在這個過程中涉及哪些文件和目錄?
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
在某些 Linux 系統上(大多數基於 Debian 的系統),還會看到:
si::sysinit:/etc/init.d/rcS
如果是後一種情況,/etc/init.d/rcS 是一個腳本,它只運行每個匹配 /etc/rcS.d/[Ss]??* 的腳本。另一方面,如果系統使用 /etc/rc.d/rc.sysinit,那麼這個文件包含一個長腳本,用於執行所有 初始化過程。
l0:0:wait:/etc/rc.d/rc 0
# ...
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
腳本 /etc/rc.d/rc 將運行所有匹配 /etc/rc$1.d/[KkSs]??* 模式的文件。例如,在以運行級別 5 啟動的示例系統上,會依次運行以下文件:
/etc/rc5.d/K15postgresql
/etc/rc5.d/S01switchprofile
/etc/rc5.d/S05harddrake
...
/etc/rc5.d/S55sshd
...
/etc/rc5.d/S99linuxconf
/etc/rc5.d/S99local
以 “K”或“k” 開頭的文件是殺死腳本,它們結束進程或者清除進程的操作。以“S”或“s”開頭的文件是啟動腳本,它們一般啟動新進程或者使系統准備在此運行級別上運行。這些文件大多數是 shell 腳本,而且大多數是鏈接(常常鏈接到 /etc/init.d/ 中的文件)。
在大多數情況下,當 Linux 系統在一個運行級別上運行之後,您希望作為用戶登錄進系統。為此,運行一個稱為 getty 的程序來處理登錄過程。發行版創建者們使用基本 getty 的許多變體,比如 agetty、mgetty 和 mingetty。這些程序基本上都做同樣的工作。
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
第一個數字是運行 getty 的虛擬終端,後面的一組數字是采用此操作的幾個運行級別(例如,在運行級別 2、3、4 和 5 上都啟動 mingetty)。
接下來的步驟可能涉及啟動更多服務、登錄進一種圖形化環境、恢復 UI 設置或者其他更個性化的細節,這超出了本教程的討論范圍。