/etc/inittab文件詳解 html
Linux系統的啓動過程爲:加電自檢-->根據BIOS中的設置從指定的設備啓動-->找到設備MBR中的bootloader引導啓動系統-->啓動kernel-->啓動init進程linux
咱們看到,Linux系統啓動的最後是啓動init進程,而init進程是怎麼工做的呢?init進程就是根據/etc/inittab這個文件來在不一樣的運行級別啓動相應的進程或執行相應的操做。 服務器
/etc/inittab這個文件中定義的登記項都是以:隔開的四個段,即: ide
id:runlevels:action:process 優化
id:它是每一個登記項的標識符,用於惟一標識每一個登記項,不能重複 spa
runlevels:系統的運行級別,表示process的action要在哪一個級別下運行,該段中能夠定義多個運行級別,各級別之間直接寫不用分隔符;若是爲空,表示在全部的運行級別運行。Linux的運行級別有: 命令行
0:表示關機 server
1:表示單用戶模式,在這個模式中,用戶登陸不須要密碼,默認網卡驅動是不被加載,一些服務不能用。 htm
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
當內核初始化後,就會啓動第一個進程 init,init進程會進行一系列的系統初始化工做,init是根據什麼來進行初始化的?
init 會讀取/etc/inittab文件(針對CentOS 5 系列),執行裏面的內容來進行初始化工做,這個文件是必定的格式。
獲取inittab文件的幫助,輸入 man inittab 命令
過濾掉空白行和以#號開始的行,內容以下:
[root@server1 ~]# egrep -v '^$|^#' /etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
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
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
pf::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 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
x: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 這是一個系統初始化腳本,這個腳本里面初始化不少的
該腳本的做用:
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 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
這幾個跟上面一模一樣
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
ca id名稱
runlevel留空 表明全部級別
ctrlaltdel 表明 ctrl+alt+delete
/sbin/shutdown -t3 -r now 執行重啓命令
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pf id名稱
runlevel留空 表明全部級別
powerfail 當忽然斷電時執行
/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" 服務器在UPS前提下,當忽然斷電,服務器就會倒計時2分鐘,進行關機
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
pr id名稱
12345 也就是在12345級別下才會執行後面的動做
powerokwait 也就是上面的倒計時未結束(在2分鐘以內)再來電,那麼取消關機
/sbin/shutdown -c "Power Restored; Shutdown Cancelled" 取消關機
1:2345:respawn:/sbin/mingetty tty1
1 id名稱
2345 也就是在2345級別下才會執行後面的動做
respawn 意思就是當後面的要執行的程序(/sbin/mingetty tty1) 終止了,init進程會自動重啓該進程
/sbin/mingetty tty1 執行的程序
這一行大致意思就是 當虛擬終端進程結束了,init會自動再次打開虛擬終端,就是咱們用SSH鏈接到服務器,退出時系統會打開一個登陸的界面等待輸入
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
跟上面同樣,系統優化的時候能夠適量減小一些虛擬終端的數量,能夠減小系統資源佔用。
x:5:respawn:/etc/X11/prefdm -nodaemon
x id名稱5 後面的動做只是在5級別下運行respawn 會自動重啓後面的程序/etc/X11/prefdm -nodaemon 這個是圖形界面這一行大致意思是 當圖形化界面進程結束,會自動再打開圖形化程序