在KERNEL起來之后,將生成第一個進(jìn)程——init,實際上是執(zhí)行了/sbin/init。init的工作是根據(jù)/etc/inittab來執(zhí)行相應(yīng)的腳本進(jìn)行系統(tǒng)初始化,如設(shè)置鍵盤、字體,裝載模塊,設(shè)置網(wǎng)絡(luò),等等。
/etc/inittab文件的每一行包括四個域:
id:runlevels:action:process
runlevel是運行模式,通常為0-6。模式0是 halt,模式6是reboot,模式1是單用戶,模式2/3是多用戶,模式5是運行xdm以圖形界面方式登錄。id為標(biāo)識符,通常為兩個字母。 process為需要執(zhí)行的程序或腳本。action包括有:
(1) defaultinit —— 指定缺省的運行模式(runlevel)
(2) sysinit —— 指定運行的第一個程序/腳本,此時runlevels域不起作用。
(3) boot —— 在sysinit之后執(zhí)行,runlevels域不起作用
(4) bootwait —— 同boot,但init會等待該命令結(jié)束
(5) once —— 在進(jìn)入有runlevels指定的運行模式時運行
(6) wait —— 同上,但init會等待該命令結(jié)束
(7) respawn —— 在進(jìn)入相應(yīng)runlevel時執(zhí)行,并且若該進(jìn)程結(jié)束,init會再起一個進(jìn)程執(zhí)行同樣的命令
(icon_cool.gif ctrlaltdel —— 指定在用戶按下Ctrl-Alt-Del時執(zhí)行的命令
對于linux來說,執(zhí)行的順序為:
/etc/rc.d/rc.sysinit # 由init執(zhí)行的第一個腳本
/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL為缺省的運行模式
/sbin/mingetty # 等待用戶登錄
init程序部分
init 程序通常在/sbin或/bin下,它負(fù)責(zé)在系統(tǒng)啟動時運行一系列程序和腳本文件。init程序一旦被內(nèi)核調(diào)用,便成為系統(tǒng)的第0號進(jìn)程,該進(jìn)程對于 LINUX系統(tǒng)是十分重要的,有關(guān)它的詳細(xì)內(nèi)容請參閱其他資料。init進(jìn)程做的每一步都由/etc/initab中的配置決定。以下是RadHat 的/etc/inittab文件的例子:
inittab文件的每一行包含四個域,格式為:
code:runlevels:action:command
(1) code域用單個或兩個字符序列來作為本行的標(biāo)識,這個標(biāo)識在此文件中是唯一的。文件中的某些記錄必須使用特定的code才能使系統(tǒng)工作正常。
(2) runlevels域給出的是本行的運行級別。LINUX系統(tǒng)運行在一定的級別下,當(dāng)inittab文件指定了某一特定的運行級別時,該記錄行包含的命令將被執(zhí)行。RedHat系統(tǒng)通常設(shè)置了7個運行級別(0-6),各運行級別的說明包含在inittab文件的開頭。
(3) action域指出的是init程序執(zhí)行command命令的方式。比如:只執(zhí)行command一次,還是在它退出時重啟。
(4) command域給出相應(yīng)記錄行要執(zhí)行的命令
運行級別1是單用戶模式,所謂單用戶指的是系統(tǒng)運行在唯一用戶–超級用戶模式下。而大多數(shù)情況下,系統(tǒng)運行在多用戶模式下。在啟動出錯、文件系統(tǒng)出錯等情況下,系統(tǒng)將進(jìn)入單用戶模式,此時,系統(tǒng)只有很少的配置,這對于恢復(fù)系統(tǒng)是很必要的。
inittab文件首先指出缺省的運行級別(如 id:3:initdefault:),我們看到上面的例子中缺省的運行級別為3。此后根據(jù)下一條記錄,系統(tǒng)應(yīng)當(dāng)運行/etc/rc.d/rc.sysinit,這是一個腳本文件,主要包括基本的系統(tǒng)初始化命令,如激活交換分區(qū)、檢查并掛上文件系統(tǒng)、裝載部分模塊等。