• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 8, comments - 12, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
            init和inittab
            =============
            Linux下為什么會(huì)要有個(gè)init?用過(guò)windows 9.x的人應(yīng)該知道有個(gè)批處理文件autoexec.bat,用過(guò)windows NT/2000系統(tǒng)的人應(yīng)該在控制面板中見(jiàn)過(guò)system service工具,它們的目的是相同的。只是比較起來(lái)windows下的這些東西功能太弱(當(dāng)然用法也更簡(jiǎn)單)。
            init是Linux啟動(dòng)的最后一步,它幫助用戶(hù)完成每次啟動(dòng)系統(tǒng)都必須完成的一些重復(fù)性任務(wù),如加載文件系統(tǒng)、各類(lèi)網(wǎng)絡(luò)服務(wù)等等程序;它還有一個(gè)重要用途,讓用戶(hù)自定義系統(tǒng)運(yùn)行環(huán)境,只啟動(dòng)需要的進(jìn)程,關(guān)閉不用的進(jìn)程,釋放內(nèi)存和處理器資源,讓系統(tǒng)運(yùn)行得更快更穩(wěn)。

            init 會(huì)按任務(wù)表執(zhí)行我們下的命令,這個(gè)任務(wù)表就是/etc/inittab文件。我們可以為系統(tǒng)制定多個(gè)運(yùn)行環(huán)境以滿(mǎn)足不同任務(wù)的需要,在inittab中稱(chēng) 之為運(yùn)行等級(jí)(runlevel)。例如,計(jì)算機(jī)要用來(lái)完成一種聯(lián)網(wǎng)編譯任務(wù)(與其它系統(tǒng)共享CPU周期,合作編譯軟件),這樣情況需占用大量CPU能力 和內(nèi)存,所以當(dāng)計(jì)算機(jī)用作這種用途時(shí),其他程序的運(yùn)行要盡可能少。可設(shè)置一個(gè)運(yùn)行等級(jí)(如:runlevel 4),把其它程序包括X Window全關(guān)閉,只啟動(dòng)聯(lián)網(wǎng)編譯進(jìn)程;其他時(shí)段,你的計(jì)算機(jī)要與Windows系統(tǒng)共享文件,需要啟動(dòng)Samba,可以再定義一個(gè)運(yùn)行等級(jí)(如: runlevel 2)。
            現(xiàn)在當(dāng)你要進(jìn)行聯(lián)網(wǎng)編譯時(shí)可運(yùn)行init 4,而不用手工去關(guān)閉每個(gè)暫不需要的進(jìn)程;要與Windows系統(tǒng)共享文件可運(yùn)行init 2。

            Debian系統(tǒng)對(duì)某些運(yùn)行等級(jí)進(jìn)行了預(yù)先配置(而且是無(wú)法修改的)

            runlevel 0:它的任務(wù)就是關(guān)閉所有程序,關(guān)機(jī)。如果計(jì)算機(jī)及內(nèi)核支持APM,系統(tǒng)電源可自動(dòng)切斷。

            runlevel 1:為單用戶(hù)模式保留的。在這個(gè)運(yùn)行等級(jí)下,除了一個(gè)root shell外,沒(méi)有其它程序運(yùn)行。除了root文件系統(tǒng)以只讀方式安裝外,不安裝其它文件系統(tǒng)。該運(yùn)行等級(jí)通常在恢復(fù)系統(tǒng)時(shí)用。

            runlevel 6:與runlevel 0非常相似,只是它是重啟系統(tǒng)而不是關(guān)閉系統(tǒng)。

            runlevel 2、3、4、5:Debian系統(tǒng)對(duì)它們沒(méi)有具體規(guī)定,通常可自由進(jìn)行定制,它們都屬于多用戶(hù)模式。其中runlevel 3是Debian使用的默認(rèn)運(yùn)行等級(jí)。啟動(dòng)Debian系統(tǒng)時(shí),用的就是這個(gè)運(yùn)行等級(jí)。

            下面是inittab文件的例子

            # /etc/inittab: init(8) configuration.
            # $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $

            # The default runlevel.
            id:2:initdefault:

            # Boot-time system configuration/initialization script.
            # This is run first except when booting in emergency (-b) mode.
            si::sysinit:/etc/init.d/rcS

            # What to do in single-user mode.
            ~~:S:wait:/sbin/sulogin

            # /etc/init.d executes the S and K scripts upon change
            # of runlevel.
            #
            # Runlevel 0 is halt.
            # Runlevel 1 is single-user.
            # Runlevels 2-5 are multi-user.
            # Runlevel 6 is reboot.

            l0:0:wait:/etc/init.d/rc 0
            l1:1:wait:/etc/init.d/rc 1
            l2:2:wait:/etc/init.d/rc 2
            l3:3:wait:/etc/init.d/rc 3
            l4:4:wait:/etc/init.d/rc 4
            l5:5:wait:/etc/init.d/rc 5
            l6:6:wait:/etc/init.d/rc 6
            # Normally not reached, but fallthrough in case of emergency.
            z6:6:respawn:/sbin/sulogin

            # What to do when CTRL-ALT-DEL is pressed.
            ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

            # Action on special keypress (ALT-UpArrow).
            #kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."

            # What to do when the power fails/returns.
            pf::powerwait:/etc/init.d/powerfail start
            pn::powerfailnow:/etc/init.d/powerfail now
            po::powerokwait:/etc/init.d/powerfail stop

            # /sbin/getty invocations for the runlevels.
            #
            # The "id" field MUST be the same as the last
            # characters of the device (after "tty").
            #
            # Format:
            # <id>:<runlevels>:<action>:<process>
            #
            # Note that on most Debian systems tty7 is used by the X Window System,
            # so if you want to add more getty's go ahead but skip tty7 if you run X.
            #
            1:2345:respawn:/sbin/getty 38400 tty1
            2:23:respawn:/sbin/getty 38400 tty2
            3:23:respawn:/sbin/getty 38400 tty3
            4:23:respawn:/sbin/getty 38400 tty4
            5:23:respawn:/sbin/getty 38400 tty5
            6:23:respawn:/sbin/getty 38400 tty6

            # Example how to put a getty on a serial line (for a terminal)
            #
            #T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
            #T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100

            # Example how to put a getty on a modem line.
            #
            #T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3

            該文件有一個(gè)基本類(lèi)型的指令,它們指定命令行,命令行所采取的動(dòng)作,在何種運(yùn)行等級(jí)下激活命令。這引起命令行的格式大體如下:

            id:runlevels:action:command

            id是任意一個(gè)名稱(chēng)(具體是什么并不重要),runlevels是一個(gè)數(shù)字串(代表運(yùn)行等級(jí)),action描述何時(shí)執(zhí)行命令,command指定執(zhí)行的實(shí)際命令。拿啟動(dòng)getty的命令行舉例:

            1:2345:respawn:/sbin/getty 38400 tty1

            該命令告訴init,它應(yīng)該在引導(dǎo)后以運(yùn)行等級(jí)2-5運(yùn)行命令/sbin/getty 38400 tty1。動(dòng)作標(biāo)記respawn表示命令在退出時(shí)重新運(yùn)行(當(dāng)用戶(hù)在shell輸入exit的時(shí)候)。

            從方面的文件中可以看到,運(yùn)行等級(jí)2和3有六個(gè)活動(dòng)的gettys,而等級(jí)4和5只有一個(gè)。假設(shè)運(yùn)行等級(jí)4下有三個(gè)shell運(yùn)行在虛擬控制臺(tái)。你在ID為2和3的命令行的運(yùn)行等級(jí)字段添加了數(shù)字4,也就是說(shuō)你將

            2:23:respawn:/sbin/getty 38400 tty2
            3:23:respawn:/sbin/getty 38400 tty3

            替換成

            2:234:respawn:/sbin/getty 38400 tty2
            3:234:respawn:/sbin/getty 38400 tty3

            然后重啟或執(zhí)行以下命令:

            telinit q

            對(duì)inittab進(jìn)行修改。telinit q命令指示init重新加載它的配置。參閱telinit(8)。

            /etc/inittab的其它行看起來(lái)比較復(fù)雜,我們先看看還有哪些動(dòng)作標(biāo)記:

            ·respawn:?jiǎn)?dòng)命令并監(jiān)視命令的執(zhí)行,當(dāng)進(jìn)程退出時(shí),再次執(zhí)行該命令(通常用于虛擬終端設(shè)備上的登錄提示)。 ·wait:進(jìn)入指定運(yùn)行等級(jí)時(shí),啟動(dòng)進(jìn)程。init會(huì)停下來(lái),直到執(zhí)行完成。這個(gè)標(biāo)記用于設(shè)置特定等級(jí)下軟件的啟動(dòng)。
            ·once:進(jìn)入指定的任一運(yùn)行等級(jí)時(shí),啟動(dòng)一次進(jìn)程。
            ·boot:該命令在系統(tǒng)引導(dǎo)時(shí)運(yùn)行。這種類(lèi)型的指令忽略運(yùn)行等級(jí)。
            ·bootwait:該命令在系統(tǒng)引導(dǎo)時(shí)運(yùn)行,init等到它退出后才能繼續(xù)做別的事。
            ·off:禁用所有運(yùn)行等級(jí)下的某個(gè)命令。
            ·initdefault:這種類(lèi)型的項(xiàng)指定在系統(tǒng)引導(dǎo)時(shí)進(jìn)入哪個(gè)運(yùn)行等級(jí)。
            ·powerwait:這類(lèi)指令給出在電源不足時(shí)需要執(zhí)行的命令。init直到進(jìn)程完成后才繼續(xù)工作。
            ·powerfail:與powerwait類(lèi)似,但init不等待進(jìn)程完成。
            ·powerworkwait:電源正常后執(zhí)行。init暫停,直到進(jìn)程結(jié)束。
            ·powerfailnow:當(dāng)便攜機(jī)電池或外部UPS電池電量不足時(shí)執(zhí)行。
            ·ctrlaltdel:指定init在捕獲ctrl+alt+del組合鍵時(shí)執(zhí)行的命令。
            ·kbdrequest:把特殊動(dòng)作映射到特定的按鍵。Debian中的是alt+UpArrow。

            現(xiàn)在再看上面的文件是不是清楚了許多?

            更強(qiáng)大的sysvinit
            ================
            inittab 的主要功能是描述引導(dǎo)及正常操作時(shí),應(yīng)該在何種運(yùn)行等級(jí)下啟動(dòng)什么程序,每個(gè)運(yùn)行等級(jí)的具體項(xiàng)目完全可以通常/etc/inittab來(lái)定義,但 Debian有一個(gè)更健壯的方案sysvinit,它被認(rèn)為是init最強(qiáng)大的應(yīng)用程序之一。Debian組織inittab的方式是把運(yùn)行等級(jí)的大部分 定義從inittab中移出來(lái),移到一個(gè)腳本層次中去。惟一直接從inittab啟動(dòng)的程序只有g(shù)etty,它用于虛擬設(shè)備上啟動(dòng)登錄提示符,保留它因?yàn)?它們要求特殊處理,在inittab之外處理要困難得多。

            inittab來(lái)啟動(dòng)所有軟件當(dāng)然是可能的,但將所有配置寫(xiě)在同一個(gè)文件既不方便查看也不方便維護(hù),所以文件里會(huì)加上這許多行:

            l0:0:wait:/etc/init.d/rc 0
            l1:1:wait:/etc/init.d/rc 1
            l2:2:wait:/etc/init.d/rc 2
            l3:3:wait:/etc/init.d/rc 3
            l4:4:wait:/etc/init.d/rc 4
            l5:5:wait:/etc/init.d/rc 5
            l6:6:wait:/etc/init.d/rc 6

            這些行實(shí)際決定了系統(tǒng)在各個(gè)運(yùn)行等級(jí)下的行為。它們?nèi)绾巫龅降囊苍S并不明顯,但至少我們知道主要意思:首先每行都有個(gè)符號(hào)ID lx,lx表示runlevel x;其次,每行只在一個(gè)運(yùn)行等級(jí)下激活,該運(yùn)行等級(jí)對(duì)應(yīng)著符號(hào)ID中的數(shù)字x。命令執(zhí)行時(shí),init停下來(lái),直到進(jìn)程結(jié)束。最后,每個(gè)命令行調(diào)用一個(gè)腳本 /etc/init.d/rc x,這里x代表當(dāng)前運(yùn)行等級(jí)的數(shù)字。顯然各運(yùn)行等級(jí)的具體任務(wù)在/etc/init.d/rc腳本中安排。

            Debian init設(shè)置的核心在/etc/init.d目錄。該目錄包含了啟動(dòng)或停止重要軟件的腳本,為了簡(jiǎn)化操作,規(guī)定每個(gè)腳本都使用相同的一套參數(shù)——start或stop。個(gè)別軟件包維護(hù)者為用戶(hù)著想,往這些腳本中加了其他功能,但init不會(huì)去調(diào)用它們。
            舉個(gè)例子,可調(diào)用:#/etc/init.d/apache start來(lái)啟動(dòng)Apache,調(diào)用:#/etc/init.d/apache stop來(lái)關(guān)閉它。
            作為一個(gè)用戶(hù)工具,這是非常有用的,它讓用戶(hù)輕松啟動(dòng)和關(guān)閉Debian所帶的復(fù)雜程序,不過(guò)在考慮如何啟動(dòng)程序前,先檢查 /etc/init.d,看看是不是已經(jīng)有腳本可以做這件事了。借助于這種機(jī)制,可以按自己的需求來(lái)調(diào)整運(yùn)行等級(jí),/etc/init.d/rc可以把系 統(tǒng)引入所需的運(yùn)行等級(jí)。 /etc/rcx.d是一組指向/etc/init.d的符號(hào)鏈接。進(jìn)行運(yùn)行等級(jí)時(shí),rc在運(yùn)行等級(jí)目錄中按邏輯順序處理每個(gè)腳本。首先前綴為K的每個(gè)文 件都以參數(shù)stop(按字母和數(shù)字順序)執(zhí)行;其次,以S為前綴的每個(gè)腳本都以參數(shù)start(按字母和數(shù)字順序)執(zhí)行。
            了解了工作原理,下面試著自己來(lái)構(gòu)造一個(gè)運(yùn)行等級(jí)。我們使用運(yùn)行等級(jí)5和與之相關(guān)的rc目錄/etc/rc5.d。首先,看看該目錄下的內(nèi)容: 找出每個(gè)符號(hào)鏈接所做的工作;查看文件,判斷它來(lái)自哪個(gè)文件。經(jīng)過(guò)仔細(xì)查看,找出啟動(dòng)無(wú)用程序的S打頭的腳本,把它們刪掉,在/etc/init.d中找 出需要運(yùn)行但未包括在內(nèi)的腳本,例如假設(shè)你想在運(yùn)行等級(jí)5下啟動(dòng)Samba,執(zhí)行命令:

            ln -s /etc/init.d/samba /etc/rc5.d/S20samba

            看到這里是不是對(duì)init有了新的了解,那么來(lái)測(cè)試一下學(xué)習(xí)成果:關(guān)閉Debian默認(rèn)安裝時(shí)加載的gdm/xdm/kdm進(jìn)程,讓Debian啟動(dòng)到命令行終端而不是X。

            亚洲欧洲精品成人久久奇米网| 99久久亚洲综合精品网站| 香蕉aa三级久久毛片| 日日狠狠久久偷偷色综合免费| 亚洲国产成人精品女人久久久 | 久久久噜噜噜久久熟女AA片| 国产精品美女久久久久久2018| 久久婷婷国产麻豆91天堂| 人妻少妇精品久久| 国产一久久香蕉国产线看观看| 色综合久久中文字幕综合网| 嫩草伊人久久精品少妇AV| 久久精品国产只有精品66| 亚洲av日韩精品久久久久久a| 久久狠狠色狠狠色综合| 国内精品久久久久影院老司| 99久久免费国产精精品| 漂亮人妻被中出中文字幕久久| 色成年激情久久综合| 午夜精品久久久久久久| 久久国产高清一区二区三区| 久久天天躁狠狠躁夜夜躁2O2O| 久久国产精品视频| 久久久久久久综合日本亚洲| 精品综合久久久久久97| 久久夜色撩人精品国产小说| 91精品国产高清久久久久久io| 热99RE久久精品这里都是精品免费| 久久国产香蕉视频| 久久99精品久久久久久9蜜桃| 91久久精品91久久性色| 久久精品国产亚洲av麻豆小说| 久久伊人精品一区二区三区| 久久久精品日本一区二区三区| 国产一区二区三精品久久久无广告| 丁香五月网久久综合| 91精品国产综合久久久久久| 国产一区二区三区久久| 亚洲精品高清久久| 久久久99精品一区二区| 亚洲人成网站999久久久综合 |