Linux之/etc/inittab檔案

來源:互聯網
上載者:User
一、什麼是init

  init是Linux系統操作中不可缺少的程式之一。 是一個由核心啟動的使用者級進程。

  核心啟動(已經被載入記憶體,開始運行,並已初始化所有的裝置驅動程式和資料結構等)之後,就通過啟動一個使用者級程式init的方式來啟動其他使用者級的進程或服務。所以,init始終是第一個進程(其PID始終為1)。

  核心會在過去曾使用過init的幾個地方尋找它,它的正確位置(對Linux系統來說)是/sbin/init.如果核心找不到init,它就會試著運行/bin/sh,如果運行失敗,系統的啟動也會失敗。

二、運行層級

    Runlevel 0是讓init關閉所有進程並終止系統。
    Runlevel 1是用來將系統轉到單一使用者模式,單一使用者模式只能有系統管理員進入,在該模式下處理那些在有登入使用者的情況下不能變更的檔案,改runlevel的編號1也可以用S代替。
    Runlevel 2是允許系統進入多使用者的模式,但並不支援檔案分享權限設定,這種模式很少應用。
    Runlevel 3是最常用的運行模式,主要用來提供真正的多使用者模式,也是多數伺服器的預設模式。
    Runlevel 4一般不被系統使用,使用者可以設計自己的系統狀態並將其應用到runlevel 4階段,儘管很少使用,但使用該系統可以實現一些特定的登入請求。
    Runlevel 5是將系統初始化為專用的X Window終端。對功能強大的Linux系統來說,這並不是好的選擇,但使用者如果需要這樣,也可以通過在runlevel啟動來實現該方案。
    Runlevel 6是關閉所有啟動並執行進程並重新啟動系統。

這些層級在/etc/inittab 檔案裡指定。這個檔案是init 程式尋找的主要檔案,最先啟動並執行服務是放在/etc/rc.d 目錄下的檔案。在大多數的Linux 發行版本中,啟動指令碼都是位於 /etc/rc.d/init.d中的。這些指令碼被用ln 命令串連到 /etc/rc.d/rcn.d 目錄。(這裡的n 就是運行級0-6)

三、運行層級的配置

        在inittab檔案中以#開頭的所有行都是注釋行。注釋行有助於使用者理解inittab檔案,inittab檔案中的值都是如下格式:

        label:runlevel:action:process

        1, label是1~4個字元的標籤,用來標示輸入的值。一些系統只支援2個字元的標籤。鑒於此原因,多數人都將標籤字元的個數限制在2個以內。該標籤可以是任一字元構成的字串,但實際上,某些特定的標籤是常用的,在Red Hat Linux中使用的標籤是:

id 用來定義預設的init啟動並執行層級

si 是系統初始化的進程

ln 其中的n從1~6,指明該進程可以使用的runlevel的層級

ud 是升級進程

ca 指明當按下Ctrl+Alt+Del時啟動並執行進程

pf 指當UPS表明斷電時啟動並執行進程

pr 是在系統真正關閉之前,UPS發出電源恢複的訊號時需要啟動並執行進程

x 是將系統轉入X終端時需要啟動並執行進程

2,runlevel欄位指定runlevel的層級。可以指定多個runlevel層級,也可以不為runlevel欄位指定特定的值。(另外sysinit、boot、bootwait這三個進程會忽略這個設定值。)

3,action:表示進入對應的runlevels時,init應該運行process欄位的命令的方式。有效action值如下:

respawn:表示init應該監視這個進程,即使其結束後也應該被重新啟動。

  wait:init應該運行這個進程一次,並等待其結束後再進行下一步操作。

  once:init需要運行這個進程一次。

  boot:隨系統啟動運行,所以runlevel值對其無效。

  bootwait:隨系統啟動運行,並且init應該等待其結束。

  off:沒有任何意義。

  initdefault:系統啟動後的預設運行層級;由於進入相應的運行層級會啟用對應層級的進程,所以對其指定process欄位沒有任何意義。如果inittab檔案內不存在這一條記錄,系統啟動時在控制台上詢問進入的運行級。

  sysinit:系統啟動時準備啟動並執行命令。比如說,這個命令將清除/tmp.可以查看/etc/rc.d/rc.sysinit指令碼瞭解其運行了那些操作。

  powerwait:允許init在電源被切斷時,關閉系統。當然前提是有U P S和監視U P S並通知init電源已被切斷的軟體。RH linux預設沒有列出該選項。

  powerfail:同powerwait,但init不會等待正在啟動並執行進程結束。RH linux預設沒有列出該選項。

  powerokwait:當電源監視軟體報告“電源恢複”時,init要執行的操作。

  powerfailnow:檢測到ups電源即將耗盡時,init要執行的操作,和powerwait/powerfail不同的喲。

  ctrlaltdel:允許init在使用者於控制台鍵盤上按下Ctrl + Alt + Del按鍵組合時,重新啟動系統。注意,如果該系統放在一個公用場所,系統管理員可將Ctrl + Alt + Del按鍵組合配置為別的行為,比如忽略等。我是設定成列印一句罵人的話了^o^. kbrequest:監視到特定的鍵盤按鍵組合被按下時採取的動作,現在還不完善。

  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不知道該怎麼翻譯才好。慚愧!)

4,process欄位包含init執行的進程,該進程採用的格式與在命令列下運行該進程的格式一樣,因此process欄位都以該進程的名字開頭,緊跟著是運行時,緊跟著是運行時要傳遞給該進程的參數。比如/sbin/shutdown -t3 -r now,該進程在按下Ctrl+Alt+Del時執行,在命令列下也可以直接輸入來重新啟動系統。

四、例子

仔細學習例子檔案,學習應用其中關於inittab的文法格式。該檔案的大多數內容都可以忽略,因為超過一半的內容都是注釋,剩餘的一些檔案內容主要是用來實現某些特殊的功能:

    id 的值表明預設的runlevel是3。

    ud 的值可以喚醒/sbin/update進程,該進程為保持磁碟的完整性,將在對磁碟進行I/O操作之前清空整個I/O緩衝區。

    pf、pr和ca的值只被特定的中斷所調用。

    如果系統是專用的X終端,則只需x的輸入值。

    getty進程來提供虛擬終端裝置的服務,例如:

    3:2345:respawn:/sbin/mingetty tty3

    標籤欄位的值是3,3是裝置tty3的數字尾碼,tty3與相應的進程相關聯,該getty進程可以啟動的runlevel是2、3、4和5,當該進程終止時,init馬上就重新啟動它。啟動進程的路徑名是/sbin/mingetty,該進程是實現虛擬終端支援的最小版本的getty,為tty3提供啟動虛擬設備的進程。

    si::sysinit:/etc/rc.d/rc.sysinit

    該值告訴init程式運行/etc/rc.d/rc.sysinit指令檔來初始化系統,該指令檔與所有啟動的指令碼類似,它只是一個包含Linux的 shell命令的可執行檔,注意輸入的字串必須包括該指令碼的完整路徑。不同版本的Linux存放該指令碼的位置也不相同,但不用刻意去記憶這些位置,只需查看/etc/inittab檔案即可,該檔案中包含啟動指令檔的確切位置。

一份完整的inittab檔案

引用內容:    #
    # inittab       This file describes how the INIT process should set up
    #               the system in a certain run-level.
    #
    # Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
    #               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:
                                                                                                                             
    # System initialization.
    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

    # Things to run in every runlevel
    ud::once:/sbin/update
                                                                                                                             
    # Trap CTRL-ALT-DELETE
    ca::ctrlaltdel:/sbin/shutdown -t3 -r now
                                                                                                                             
    # 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"
                                                                                                                             
    # If power was restored before the shutdown kicked in, cancel it.
    pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"


    # 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                                                                                                                             
    # Run xdm in runlevel 5
    x:5:respawn:/etc/X11/prefdm -nodaemon

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.