inittab文件詮釋

轉自:http://hi.baidu.com/52hack/blog/item/50242d2daf9f813c359bf75f.html

欲說inittab,還得從init說起,init是所有進程的父進程,他的一個主要的角色就是從/etc/inittab這個文件來讀取腳本信息並建立進程。
下邊這個文件是Asianux 3.0的inittab文件,下面就此文件作一簡單的註釋,並在最後將man inittab的精華部分漢化一下:)
注意:此文件語句以#開頭全部爲註釋語句
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg,
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 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)
#
id:3:initdefault: // init首先從這條語句得知,系統當前的運行級別,除非用戶在啓動時給了kernel參數
# System initialization.
si::sysinit:/etc/rc.d/rc.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
//上述的7條語句表示了系統定義的7個運行級別,init此時會判定當前系統屬於那個級別,然後去相應的目錄執行相應的腳本。
# Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
//可定義用戶按下神奇的ctrl alt del會發生什麼情況
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h 2 "Power Failure; System Shutting Down"
// ups電源保護,當然你確實有這種昂貴的東西。
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
//關機。。。呵呵
# Run gettys in standard runlevels
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
//分配tty終端給虛擬控制檯
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
//當用戶以5級別來啓動系統時, init 會分配給它一個prefdm的不是守護進程的進程。
/etc/inittab文件中每個登記項的結構都是一樣的,共分爲以冒號“:”分隔的4個字段。具體如下:
identifier : run_level : action : process
其中,各字段以及與其相關的說明如下:
identifier  登記項標識符,最多爲4個字符。用於惟一地標識/etc/inittab文件中的每一個登記項
run_level  系統運行級,即執行登記項的init級別。用於指定相應的登記項適用於哪一個運行級,即在哪一個運行級中被處理。如果該字
段爲空,那麼相應的登記項將適用於所有的運行級。在該字段中,可以同時指定一個或多個運行級,其中各運行級分別以數字0.1.2.3.4.5.6或字母
a、b、c表示,且無需對其進行分隔。
action    動作關鍵字。用於指定init(M)命令或進程對相應進程(在“process”字段定義)所實施的動作。具體動作包括:
  1、boot:只有在引導過程中,才執行該進程,但不等待該進程的結束;當該進程死亡時,也不重新啓動該進程。
  2、bootwait:只有在引導過程中,才執行該進程,並等待進程的結束:當該進程死亡時,也不重新啓動該進程。實際上,只有在系統被引導
後,並從單用戶方式進入多用戶方式時,這些登記項才被處理;如果系統的默認運行級設置爲2(即多用戶方式),那麼這些登記項在系統引導後將馬上被處理。
  3、initdefault:指定系統的默認運行級。系統啓動時,init將首先查找該登記項。如果存在init將據此決定系統最初要進入
的運行級。具體來說,init將指定登記項“run_level"字段中的最大數字(即最高運行級)爲當前系統的默認運行級;如果該字段爲空,那麼將其解
釋爲“0123456”,並以“6”作爲默認運行級。如果不存在該登記項,那麼init將要求用戶在系統啓動時指定一個最初的運行級。
  4、off:如果相應的進程正在運行,那麼就發出一個警告信號,等待20秒後,再通過殺死信號強行終止該進程。如果相應的進程並不存在那麼就忽略該登記項。
  5、once:啓動相應的進程,但不等待該進程結束便繼續處理/etc/inittab文件中的下一個登記項;當該進程死亡時,init也不重新啓動該進程。注意:在從一個運行級進入另一個運行級時,如果相應的進程仍然在運行,那麼init就不重新啓動該進程。
  6、ondemand:與“respawn”的功能完全相同,但只用於運行級爲a、b或c的登記項。
  7、powerfail:只在init接收到電源失敗信號時執行相應的進程,但不等待該進程結束。
  8、powerwait:只在init接收到電源失敗信號時執行相應的進程,並在繼續對/etc/inittab文件進行任何處理前等待該進程結束。
  9、respawn:如果相應的進程還不存在,那麼init就啓動該進程,同時不等待該進程的結束就繼續掃描/etc/inittab文件;
當該進程死亡時,init將重新啓動該進程。如果相應的進程已經存在,那麼init將忽略該登記項並繼續掃描/etc/inittab文件。
  10、sysinit:只有在啓動或重新啓動系統並首先進入單用戶時,init才執行這些登記項。而在系統從運行級1-6進入單用戶方式
時,init並不執行這些登記項。"action”字段爲“sysinit”的登記項在“run_level”字段不指定任何運行級。
  11、wait:啓動進程並等待其結束,然後再處理/etc/inittab文件中的下一個登記項。
  
  process   所要執行的shell命令。任何合法的shell語法均適用於該字段。
我被奚落的也就是這麼一段話,我爲什麼以前沒有發現了呢?痛定思痛。
BTW:在任何時候,可以在文件inittab中添加新的記錄項,級別Q/q不改變當前的運行級別,重新檢查inittab文件,可以通過命令init Q或init q使init進程立即重新讀取並處理文件inittab.

發佈了0 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章