原址如下:
http://leejia.blog.51cto.com/4356849/788895
/etc/inittab檔案詳解
Linux系統的啟動過程為:加電自檢-->根據BIOS中的設定從指定的裝置啟動-->找到裝置MBR中的bootloader引導啟動系統-->啟動kernel-->啟動init進程 我們看到,Linux系統啟動的最後是啟動init進程,而init進程是怎麼工作的呢。init進程就是根據/etc/inittab這個檔案來在不同的運行層級啟動相應的進程或執行相應的操作。 /etc/inittab這個檔案中定義的登記項都是以:隔開的四個段,即: id:runlevels:action:process id:它是每個登記項的標識符,用於唯一標識每個登記項,不能重複 runlevels:系統的運行層級,表示process的action要在哪個層級下運行,該段中可以定義多個運行層級,各層級之間直接寫不用分隔字元;如果為空白,表示在所有的運行層級運行。Linux的運行層級有: 0:表示關機 1:表示單一使用者模式,在這個模式中,使用者登入不要求輸入密碼,預設網卡驅動是不被載入,一些服務不能用。 2:表示多使用者模式,NFS服務不開啟 3,表示命令列模式 4,這個模式保留未用 5,表示圖形使用者模式 6,表示重啟系統 action:表示對應登記項的process在一定條件下所要執行的動作。 具體動作有: respawn:當process終止後馬上啟動一個新的 wait:當進入指定的runlevels後process才會啟動一次,並且到離開這個runlevels終止 initdefault:設定預設的運行層級,即我們開機之後預設進入的運行層級,不能是0,6,你懂的 sysinit:系統初始化,只有系統開機或重新啟動的時候,這個process才會被執行一次 powerwait:當init接收到電源失敗訊號的時候執行相應的process,並且如果init有進程在運行,會等待這個進程完成之後,再執行相應的process powerfail:當init接收到電源失敗訊號的時候執行相應的process,並且如果init有進程在運行,不會等待這個進程完成,它會直接執行相應的process powerokwait:電源已經故障,但是在等待執行對應操作的時候突然來電了就執行對應的process powerfailnow:當電源故障並且init被通知UPS電源已經快耗盡執行相對應的process ctrlaltdel:當使用者按下ctrl+alt+del這個按鍵組合的時候執行對應的process boot:只有在引導過程中,才執行該進程,但不等待該進程的結束;當該進程死亡時,也不重新啟動該進程 bootwait:只有在引導過程中,才執行該進程,並等待進程的結束;當該進程死亡時,也不重新啟動該進程 off:如果process正在運行,那麼就發出一個警告訊號,等待20秒後,再通過殺死訊號強行終止該process。如果process並不存在那麼就忽略該登記項 once:啟動相應的進程,但不等待該進程結束便繼續處理/etc/inittab檔案中的下一個登記項;當該進程死亡時,init也不重新啟動該進程 process:表示啟動哪個程式或指令碼或執行哪個命令等 以redhat enterprise server 5.4為例。我們分析一下/etc/inittab檔案: 行首為“#”的是注釋行,沒有作用 id:3:initdefault: 第一個欄位為標識符,下面我們就不說了。這個登記項表示我們預設的運行層級是3,也就是說我們預設開機啟動會進入命令列模式。 si::sysinit:/etc/rc.d/rc.sysinit 所所有的運行層級下,init依賴/etc/rc.d/rc.sysinit這個指令碼對系統進行初始化。而/etc/rc.d/rc.sysinit的作用主要是: 1,啟用udev和selinux 2,根據/etc/sysctl.conf檔案設定核心參數 3,設定系統時鐘 4,鍵盤的鍵映射,即識別鍵盤 5,啟用swap分區 6,設定主機名稱 7,根檔案系統檢測及重新以讀寫方式掛載 8,啟用RAID和LVM裝置 9,啟用磁碟配額 10,檢測及掛載其他檔案系統(掛載/etc/fstab中定義的裝置) 11,清除到期的鎖和PID檔案 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 當進入n運行級(n就是上面所定義的運行層級),會把/etc/rc.d/rc*.d(*表示對應登記項process欄位rc後的數字)這個目錄中所有以S開頭的檔案啟用,把以K開頭的檔案給禁用,並且這些檔案只在進入相應的運行層級時執行一次,退出此運行層級失效。所以每個運行層級的服務是獨立的,而/etc/rc.d/rc*.d這個目錄中存放的是在對應層級下所要開啟和禁用的服務的檔案。 ca::ctrlaltdel:/sbin/shutdown -t3 -r now 在所有運行層級下,按下ctrl+alt+del時等待3秒鐘後重新啟動系統。這就是為什麼我們按下這三鍵後重新啟動系統 pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" 在所有的運行層級下,如果電源故障,會給出提示資訊,並且在2min後關機。 pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" 在12345運行層級下,如果電源故障的時候,電源又恢複正常,則給出提示資訊,並且立即終止關機。 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 在2345運行層級下,會啟用6個命令列介面的終端,並且一旦終端終止,就會在建立一個新的。這就是為什麼我們的系統下會有6個命令列介面的終端。 x:5:respawn:/etc/X11/prefdm -nodaemon 只有我們進入5運行層級,會開啟圖形使用者終端,並且一旦終端終止,就會再建立一個新的。你如果把這一行刪了,你的圖形介面還能用嗎。你懂的 Thus on。你是不是對linux又瞭解了很多呀。come on。
還有一篇,原址如下:
http://www.linux178.com/linux/inittab.html
詳解 /etc/inittab 檔案 作者:斯巴達克斯 時間:January 4, 2014 分類:Linux
當核心初始化後,就會啟動第一個進程 init,init進程會進行一系列的系統初始化工作,init是根據什麼來進行初始化的。
init 會讀取/etc/inittab檔案(針對CentOS 5 系列),執行裡面的內容來進行初始化工作,這個檔案是一定的格式。
擷取inittab檔案的協助,輸入 man inittab 命令
過濾掉空白行和以#號開始的行,內容如下:
[root@server1 ~]# egrep -v '^$|^#' /etc/inittabid:3:initdefault:si::sysinit:/etc/rc.d/rc.sysinitl0:0:wait:/etc/rc.d/rc 0l1:1:wait:/etc/rc.d/rc 1l2:2:wait:/etc/rc.d/rc 2l3:3:wait:/etc/rc.d/rc 3l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6ca::ctrlaltdel:/sbin/shutdown -t3 -r nowpf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"1:2345:respawn:/sbin/mingetty tty12:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty34:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6x:5:respawn:/etc/X11/prefdm -nodaemon
其格式可以歸納為如下:
id:runlevels:action:process
id 用來定義在inittab檔案唯一的條目編號,長度為 1-4個字元
runlevels 列出來啟動並執行層級 為空白則代表所有層級
action 要執行的動作
process 要執行的程式
id:3:initdefault:
id 就使用id本身來定義
3 就是列出的運行層級
initdefault
這個動作就是設定預設的運行層級,如果前面runlevels不指定運行層級,那麼會在啟動時在終端詢問,這一行不需要process這一段
si::sysinit:/etc/rc.d/rc.sysinit
id 是 si 只是用來標識
runlevels 為空白則代表的是 所有的運行層級
sysinit 是指在系統啟動時執行後面的process(也就是/etc/rc.d/rc.sysinit)
/etc/rc.d/rc.sysinit 這是一個系統初始化指令碼,這個指令碼裡面初始化很多的
該指令碼的作用:
啟用selinux和udev根據/etc/sysctl.conf檔案設定核心參數設定系統時鐘裝載鍵映射啟用交換分區設定主機名稱根檔案系統檢測並重新掛載其為讀寫;啟用RAID和LVM;檢查和掛載其它檔案系統;/etc/fstab中定義;清理操作
l0:0:wait:/etc/rc.d/rc 0
l0 就是標識這是0層級
0 就是動作是在0層級下發生
wait 是指在切換至0層級時執行後面的process(/etc/rc.d/rc 0),並且init進程會等待直到這些進程終止
/etc/rc.d/rc 0 這是一個指令碼 後面的0 是傳遞進去的參數 ,傳遞進去0就代表著要執行/etc/rc.d/rc0.d/
下面所有的指令碼首先執行K開頭的指令碼,然後執行S開頭的指令碼
這一行的意思就是當運行在0層級,就會執行/etc/rc.d/rc0.d/ 所有的指令碼
K開頭的指令碼都是需要停止的
S開頭的指令碼都是需要啟動的
後面跟的2位元數字是啟動或者停止順序
這裡面大多數是K開頭,是因為0層級本身就是關機的,所以都是要停止的,也有2個S開頭 S00killall 這個指令碼kill所有的沒有關閉的進程,S01halt 是 用來關機的 所有才有此2個S開頭的指令碼
l1:1:wait:/etc/rc.d/rc 1l2:2:wait:/etc/rc.d/rc 2l3:3:wait:/etc/rc.d/rc 3l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6
這幾個跟上面如出一轍
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
ca id名稱
runlevel留空 代表所有層級
ctrlaltdel 代表 ctrl+alt+delete
/sbin/shutdown -t3 -r now 執行重啟命令
pf::powerfail