inittab檔案中的每一行的格式如下:

id:runlevels:action:process

id :

每筆項目(entry)的識別碼,由兩個獨特的字元所組成的辨示符號。

runlevels:

執行層級,這一欄的合法值有 0,1,2...6,s以及S。又因為在一般LINUX,runlevel的預設值是3所以,只有那些每一列中 runlevel 那欄有 5 這個值的,後面的 process才會被啟動。所以,我們就可以想像的到 : " 由於系統的 runlevel 不同,所起動的 process 也不盡相同,所以系統起動的資源在每個不同的 runlevel 就會有差異存在。

0 - halt (Do NOT set initdefault to this)
1 - Single user mode
2 - Multiuser, without NFS (The same as 3, if you do not have networking)
3 - Full multiuser mode
4 - unused
5 - X11
6 - reboot (Do NOT set initdefault to this)

action:

記錄著 init 在啟動相對應的process ,對 process 所採取的動作 , 而合法的動作有下面幾項:

initdefault :

指出系統在啟動時 ,預設進入的 run-level 值,比如說,我們可以在 /etc/inittab 中找到這 一列 :id:3:initdefault:
很明顯的 ,系統將在啟動時 ,進入 runlevel 3 的模式 當然 ,你可以把 3 改成 5 試試看,如果你改成了 5 會起動X window

sysinit :

在系統起動時 ,這個 process 會被執行 。而所有 process 前的 action 中有 boot bootwait process 須等到這些 action sysinit process 執行完之後 它們才能夠執行。 
wait :
在起動一個 process 之後 ,若要再起動另一個 process ,則 必需等到這個 process 結束之後才能繼續

respawn :

代表這個 process 即使在結束之後 也會重新被啟動 , 最典型的例子就是 getty ( LINUX 中為 agetty )

ctrlaltdel :

想必有人會以鍵盤上的 Ctrl - Alt , Del 這三個 鍵來達到使系統 shutdown 的目的 , 現在我們果然在 /etc/inittab 中看到了這一列 : ca::ctrlaltdel:/sbin/shutdown -t3 -r now 所以說,當我們按下這三個鍵的時候 init 會收到 SIGINT 這個 signal 接著就執行 shutdown 的動作 不過 ,我們最好不要養成按 Ctrl-Alt-Del 來使系統 shutdown 的習慣

除了上面的幾個 action 之外 ,另外還有一些合法的 action 但這 action 並不需要太注意 要用的時候再利用 man init 去查詢就 可以了

process:

這一欄中可以是 shell script 或是可執行的程式。

在系統正在執行時, telinit 命令可以改變執行層級,當執行層級被改變了, init 就會從 /etc/inittab 檔裡面執行相對應的命令。

init 啟動時,它會去 /etc/inittab 檔案裡面尋找指定預設執行層級的命令列: 
id:3:initdefault: 
#
指定runlevel的預設值為3

si::sysinit:/etc/rc.d/rc.sysinit 
#init
在開機時,init第一次運作時會被執行rc.sysinit這個script 

l0:0:wait:/etc/rc.d/rc 0 
l1:1:wait:/etc/rc.d/rc 1 
l2:2:wait:/etc/rc.d/rc 2 
l3:3:wait:/etc/rc.d/rc 3 
l4:4:wait:/etc/rc.d/rc 4 
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6 
#
等到這些actionsysinitprocess執行完之後actionwait才能夠執行 

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 
#
系統在起動之後會製造出六個virtual console.Ctrl-Alt + F1 - F6 可在這六個 console 之間切換 init執行

rc.sysinit這個script(會起用swap space,將系統時間與CMOS硬體實間同步...)接著執行 rc.serial (若它存在的話)。之後,跟據/etc/inittab中的initdefault決定預設runlevelinit再執行此預設 runlevel(一般為3 - Full multiuser mode)的所有scripts(/etc/rc.d/rc)rc會執行一系列放在/etcrc.d/rcX.d的檔案(X代表runlevel,一般為3也就是/etcrc.d/rc3.d,runlevel5則是/etcrc.d/rc.d)
而在 /etc/rc.d/rc3.d/的檔案都是link/etc/rc.d/init.dscript ,這些script檔名都是SooxxxxKooxxx
S開頭的script是用來啟動(Start),以K開頭的script是用來終止(Kill)
oo代表0099數字較低的先執行,xxxx表對應的服務。 
ex: lrwxrwxrwx 1 root root 17 Oct 26 1999 S10network -> ../init.d/network
lrwxrwxrwx 1 root root 11 Oct 26 1999 S99local -> ../rc.local 

S10network
用來初始化網路的script 
S99local
它會等其他script檔都完成後才執行。因為99會最晚被執行。

 

arrow
arrow

    JL8051 發表在 痞客邦 留言(0) 人氣()