/etc/inittab文件詳解


/etc/inittab由/sbin/init程序解析調用,用於系統初始化,/sbin/init可參考源碼busybox中init.c的實現方式。

原址如下:

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(不同版本大同小異,我的為/etc/rc.d/rc.init)
    所所有的運行級別下,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!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM