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) |
||||||||
action: |
記錄著 init 在啟動相對應的process 時 ,對 process 所採取的動作 , 而合法的動作有下面幾項:
除了上面的幾個 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
#等到這些action為sysinit的process執行完之後action為wait才能夠執行
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決定預設runlevel,init再執行此預設 runlevel(一般為3 - Full multiuser mode)的所有scripts(/etc/rc.d/rc),rc會執行一系列放在/etcrc.d/rcX.d的檔案(X代表runlevel,一般為3也就是/etcrc.d/rc3.d,若runlevel為5則是/etcrc.d/rc.d)。
而在 /etc/rc.d/rc3.d/的檔案都是link到/etc/rc.d/init.d的script檔 ,這些script檔名都是Sooxxxx或Kooxxx。
以S開頭的script是用來啟動(Start),以K開頭的script是用來終止(Kill)。
oo代表00到99數字較低的先執行,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會最晚被執行。