一、什么是init
init是Linux系統(tǒng)操作中不可缺少的程序之一。 是一個由內(nèi)核啟動的用戶級進(jìn)程。
內(nèi)核啟動(已經(jīng)被載入內(nèi)存,開始運行,并已初始化所有的設(shè)備驅(qū)動程序和數(shù)據(jù)結(jié)構(gòu)等)之后,就通過啟動一個用戶級程序init的方式來啟動其他用戶級的進(jìn)程或服務(wù)。所以,init始終是個進(jìn)程(其PID始終為1)。
內(nèi)核會在過去曾使用過init的幾個地方查找它,它的正確位置(對Linux系統(tǒng)來說)是/sbin/init.如果內(nèi)核找不到init,它就會試著運行/bin/sh,如果運行失敗,系統(tǒng)的啟動也會失敗。
二、運行級別
運行級就是操作系統(tǒng)當(dāng)前正在運行的功能級別。這個級別從1到6,具有不同的功能。其功能級別如下:# 0 - 停機(千萬不能把initdefault 設(shè)置為0 )
# 1 - 單用戶模式# 2 - 多用戶,沒有 NFS # 3 - 完全多用戶模式(標(biāo)準(zhǔn)的運行級)
# 4 - 沒有用到# 5 - X11 (xwindow)
# 6 - 重新啟動 (千萬不要把initdefault 設(shè)置為6——把被你黑掉的linux的initdefault設(shè)置為0或6也算是拒絕服務(wù)攻擊噢!)
除此之外還有ABC三個運行級別,但在RHLinux中都沒有意義。
這些級別在/etc/inittab 文件里指定。這個文件是init 程序?qū)ふ业闹饕募\行的服務(wù)是放在/etc/rc.d 目錄下的文件。在大多數(shù)的Linux 發(fā)行版本中,啟動腳本都是位于 /etc/rc.d/init.d中的。這些腳本被用ln 命令連接到 /etc/rc.d/rcn.d 目錄。(這里的n 就是運行級0-6)
三、運行級別的配置
運行級別的配置是在/etc/inittab行內(nèi)進(jìn)行的,如下所示:12 : 2 : wait : / etc / init.d / rc 2各字段解釋如下:id:runlevels:action:process id:是一個任意指定的四個字符以內(nèi)的序列標(biāo)號,在本文件內(nèi)必須;使用老版本的libc5(低于5.2.18)或a.out庫編譯出來的sysvinit限制為2字符。注意:像getty之類的登陸進(jìn)程必須使id字段與tty編號一致,如tty1需要id=1,許多老版本的登陸進(jìn)程都遵循這種規(guī)則。
runlevels:表示這一行適用于運行那個/些級別(這里是2,可以有多個,表示在相應(yīng)的運行級均需要運行);另外sysinit、boot、bootwait這三個進(jìn)程會忽略這個設(shè)置值。
action:表示進(jìn)入對應(yīng)的runlevels時,init應(yīng)該運行process字段的命令的方式,常用的字段值及解釋在附錄內(nèi)。例子中的wait表示需要運行這個進(jìn)程一次并等待其結(jié)束。
process:具體應(yīng)該執(zhí)行的命令。例子中的/etc/init.d/rc命令啟動運行級別2中應(yīng)該運行的進(jìn)程/命令,并負(fù)責(zé)在退出運行級時將其終止(當(dāng)然在進(jìn)入的runlevel中仍要運行的程序除外。)
當(dāng)運行級別改變,并且正在運行的程序并沒有在新的運行級別中指定需要運行,那么init會先發(fā)送一個SIGTERM 信號終止,然后是SIGKILL.
有效的action值如下:respawn:表示init應(yīng)該監(jiān)視這個進(jìn)程,即使其結(jié)束后也應(yīng)該被重新啟動。
wait: init應(yīng)該運行這個進(jìn)程一次,并等待其結(jié)束后再進(jìn)行下一步操作。
once: init需要運行這個進(jìn)程一次。
boot: 隨系統(tǒng)啟動運行,所以runlevel值對其無效。
bootwait:隨系統(tǒng)啟動運行,并且init應(yīng)該等待其結(jié)束。
off: 沒有任何意義。
initdefault:系統(tǒng)啟動后的默認(rèn)運行級別;由于進(jìn)入相應(yīng)的運行級別會激活對應(yīng)級別的進(jìn)程,所以對其指定process字段沒有任何意義。如果inittab文件內(nèi)不存在這一條記錄,系統(tǒng)啟動時在控制臺上詢問進(jìn)入的運行級。
sysinit: 系統(tǒng)啟動時準(zhǔn)備運行的命令。比如說,這個命令將清除/tmp.可以查看/etc/rc.d/rc.sysinit腳本了解其運行了那些操作。
powerwait:允許init在電源被切斷時,關(guān)閉系統(tǒng)。當(dāng)然前提是有U P S和監(jiān)視U P S并通知init電源已被切斷的軟件。RH linux默認(rèn)沒有列出該選項。
powerfail: 同powerwait,但init不會等待正在運行的進(jìn)程結(jié)束。RH linux默認(rèn)沒有列出該選項。
powerokwait:當(dāng)電源監(jiān)視軟件報告“電源恢復(fù)”時,init要執(zhí)行的操作。
powerfailnow:檢測到ups電源即將耗盡時,init要執(zhí)行的操作,和powerwait/powerfail不同的喲。
ctrlaltdel:允許init在用戶于控制臺鍵盤上按下C t r l + A l t + D e l組合鍵時,重新啟動系統(tǒng)。注意,如果該系統(tǒng)放在一個公共場所,系統(tǒng)管理員可將C t r l + A l t + D e l組合鍵配置為別的行為,比如忽略等。我是設(shè)置成打印一句罵人的話了^o^. kbrequest:監(jiān)視到特定的鍵盤組合鍵被按下時采取的動作,現(xiàn)在還不完善。
ondemand:A process marked with an ondemand runlevel will be executed whenever the specified ondemand runlevel is called. However, no runlevel change will occur (ondemand runlevels are ‘a’, ‘b’,and ‘c’), (英語太菜,那個however不知道該怎么翻譯才好。慚愧!)
補充:1、關(guān)于進(jìn)入單用戶模式,一般都是采用設(shè)置initdefault為1或者在grub/lilo中指定一個“single”或“emergency” 命令行參數(shù)來實現(xiàn)。其實另外還有一個更干凈的方法,編輯:kernel /vmlinuz-2.6.9-22.EL ro root=/bin/sh,這樣init就直接啟動一個shell,其他任何進(jìn)程都沒有啟動哦,夠干凈吧!
2、系統(tǒng)正在運行時,telinit命令可更改運行級別。運行級別發(fā)生變化時, init 就會從/etc/inittab運行相應(yīng)的命令。
RedHat linux inittab詳解
更新時間: 2006-03-27 13:24:02來源: 粵嵌教育瀏覽量:1941
推薦閱讀
- ·中山豐旭電子實業(yè)有限公司專場招聘會
- ·東莞市福鑫達(dá)精密技術(shù)有限公司專場招聘
- ·嵌入式系統(tǒng)中常用的存儲設(shè)備及其特點
- ·廣州2451嵌入式開發(fā)就業(yè)班
- ·廣州2450嵌入式開發(fā)就業(yè)班
- ·粵嵌科技攜騰訊共推產(chǎn)教融合
- ·廣東英維克技術(shù)有限公司專場招聘(長沙校區(qū))
- ·廣州2448全網(wǎng)運營就業(yè)班
- ·北京朝歌數(shù)碼科技股份有限公司粵嵌專場企業(yè)招聘會線正宣講
- ·實驗室建設(shè)案例丨湖南科技大學(xué)-智能網(wǎng)聯(lián)車輛軟件設(shè)計與服務(wù)平臺項目