佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > Slackware Linux init 進(jìn)程

Slackware Linux init 進(jìn)程

熱門(mén)標(biāo)簽:硅谷的囚徒呼叫中心 解決方案 外呼系統(tǒng) 電話(huà)機(jī)器人搭建 家政服務(wù)網(wǎng)絡(luò) 服務(wù)器配置 美團(tuán) 百度競(jìng)價(jià)點(diǎn)擊價(jià)格的計(jì)算公式
Joe Brockmeier 研究了 Slackware Linux init 進(jìn)程。他討論了系統(tǒng)如何初始化服務(wù)、各種運(yùn)行級(jí)別是什么,以及如何從缺省安裝中添加或除去服務(wù)來(lái)定制系統(tǒng)。
Linux 用戶(hù)正日益成熟,這意味著他們想要將系統(tǒng)配置成執(zhí)行他們希望完成的任務(wù)。但目前 Linux 發(fā)行版通常都附帶了自動(dòng)配置的設(shè)備和啟動(dòng)服務(wù),如 Sendmail 或 Apache。這些發(fā)行版沒(méi)有考慮到的是毫不更改其缺省設(shè)置來(lái)運(yùn)行服務(wù),如 Apache -- 用戶(hù)毫不知情 -- 會(huì)讓黑客和利用腳本搗亂的人趁虛而入。而且這會(huì)用完本可以更好利用的系統(tǒng)資源 -- 比如可以用于 Quake 或您喜歡的編譯器的更多處理器時(shí)間。由于缺少控制是件“糟糕的事”,因此讓我們看一下 Linux 系統(tǒng)引導(dǎo)時(shí)在 init 進(jìn)程期間,在所涉及的各個(gè)運(yùn)行級(jí)別上都發(fā)生了什么,以及如何在系統(tǒng)運(yùn)行時(shí)定制系統(tǒng)或在運(yùn)行級(jí)別之間切換。
我們的示例使用 x86 平臺(tái)上的 Slackware Linux 發(fā)行版(請(qǐng)參閱本文后面的 參考資料 )。大多數(shù)信息可用于其它 Linux 發(fā)行版,但在細(xì)節(jié)處會(huì)略有不同。尤其是,與其說(shuō) Slackware 的 init 結(jié)構(gòu)類(lèi)似于 System V 結(jié)構(gòu),還不如說(shuō)它更類(lèi)似于 BSD UNIX 結(jié)構(gòu),盡管 Slackware 的最新發(fā)行版中的程序做了一些讓步,它們要將服務(wù)添加到啟動(dòng),但期望這些服務(wù)是 System V 目錄結(jié)構(gòu)。(請(qǐng)參閱側(cè)欄, “BSD 和系統(tǒng) V init 腳本之間的差異”。)
所有進(jìn)程的父代
當(dāng) Linux 機(jī)器引導(dǎo)時(shí),究竟會(huì)發(fā)生什么?在計(jì)算機(jī)的 BIOS 完成其任務(wù)后,系統(tǒng)會(huì)讀取硬盤(pán)(或軟盤(pán),或 CD-ROM,或 Zip 驅(qū)動(dòng)器……Linux 是非常靈活的)的第一位,并會(huì)遇到引導(dǎo)裝入程序。雖然 GRUB 和其它裝入程序也逐漸變得流行,但通常這就是 Linux 裝入程序 (LInux LOader),一般稱(chēng)作 LILO。
然后 LILO 將 Linux 內(nèi)核裝入內(nèi)存,并開(kāi)始展示它的魔力。Linux 內(nèi)核初始化了諸如 SCSI 卡之類(lèi)的設(shè)備,以及其它內(nèi)核中內(nèi)置的硬件設(shè)備。然后內(nèi)核運(yùn)行 init,它是除內(nèi)核之外在系統(tǒng)運(yùn)行的第一個(gè)進(jìn)程。如果執(zhí)行 ps ax | grep 1 ,就會(huì)看到 init 的進(jìn)程 ID (PID) 是 1。
裝入 init 之后,它會(huì)讀取 inittab 以查看下一步做什么。 inittab 告訴 init 要進(jìn)入什么運(yùn)行級(jí)別,以及在哪里可以找到該運(yùn)行級(jí)別的配置文件。
 回頁(yè)首
運(yùn)行級(jí)別
運(yùn)行級(jí)別是由系統(tǒng)上的所有服務(wù)在某個(gè)給定時(shí)間定義的(基本上是操作方式)。Linux 可以有幾種操作方式:?jiǎn)斡脩?hù)方式、單用戶(hù)聯(lián)網(wǎng)方式、多用戶(hù)方式、始于 X 窗口的多用戶(hù)方式,等等。這部分將要說(shuō)明運(yùn)行級(jí)別的概念、Slackware 上有哪些運(yùn)行級(jí)別,已經(jīng)它們被叫作什么。
運(yùn)行級(jí)別由數(shù)字或字母標(biāo)明。可惜,不是所有的 Linux 發(fā)行版在各個(gè)運(yùn)行級(jí)別的稱(chēng)呼問(wèn)題上都能達(dá)成共識(shí)。在某些發(fā)行版中,運(yùn)行級(jí)別 3 是使用 X 窗口登錄的多用戶(hù)方式。而其它的,如 Slackware,將運(yùn)行級(jí)別 3 指定成使用控制臺(tái)登錄的多用戶(hù)方式。
據(jù)我所知,所有 Linux 發(fā)行版都認(rèn)同運(yùn)行級(jí)別 0 是“停機(jī)”、運(yùn)行級(jí)別 1 或 "S" 是單用戶(hù)方式(稍后將詳細(xì)說(shuō)明),運(yùn)行級(jí)別 6 是重新引導(dǎo)系統(tǒng)。Slackware 的運(yùn)行級(jí)別如下:
運(yùn)行級(jí)別 0 = 系統(tǒng)停機(jī)
運(yùn)行級(jí)別 1 = 單用戶(hù)方式,主要用于維護(hù)
運(yùn)行級(jí)別 2 = 從不使用
運(yùn)行級(jí)別 3 = 使用控制臺(tái)登錄的多用戶(hù)方式
運(yùn)行級(jí)別 4 = 使用 X11 會(huì)話(huà)管理器的多用戶(hù)方式 (XDM, GDM, KDM)
運(yùn)行級(jí)別 5 = 從不使用
運(yùn)行級(jí)別 6 = 重新引導(dǎo)
運(yùn)行級(jí)別 S 或 s = 單用戶(hù)方式
這里沒(méi)有記錄運(yùn)行級(jí)別 7 到 9,在理論上,它們適用于在需要時(shí)定制運(yùn)行級(jí)別。但我還沒(méi)有親自嘗試過(guò)創(chuàng)建一個(gè)。  BSD 和 System V init 腳本之間的差異
Slackware Linux 使用 BSD init 腳本說(shuō)說(shuō)挺容易,但這究竟表示什么?
仿真 BSD init 樣式的 Linux 和 UNIX 系統(tǒng)有一個(gè) /etc/rc.d/ 目錄,其中每個(gè)運(yùn)行級(jí)別都包含一個(gè) init 腳本。因此,如果要查看或修改運(yùn)行級(jí)別 4 的 init 腳本,應(yīng)該編輯文件 /etc/rc.d/rc.4 。
另一方面,其 init 腳本基于 System V 的系統(tǒng)對(duì)于每個(gè)運(yùn)行級(jí)別都有獨(dú)立的目錄。因此,如果要編輯運(yùn)行級(jí)別 4 init 腳本,應(yīng)查找 /etc/rc4.d/ 目錄,并查找該目錄中對(duì)應(yīng)于要修改的服務(wù)的腳本。
這個(gè)差異導(dǎo)致了 Berkeley Software Distribution (BSD) UNIX 和 ATT System V UNIX 之間的設(shè)計(jì)差異,這兩者都開(kāi)創(chuàng)了各自的 UNIX 商業(yè)版本。它們連同 Vi 以及 Emacs 一起是計(jì)算機(jī)界的激烈爭(zhēng)論之一。
由于許多 Linux 發(fā)行版都喜歡 System V init 布局,Slackware 現(xiàn)在也附帶了目錄和 rc.sysvinit init 腳本,用于保持兼容性。
 回頁(yè)首
運(yùn)行級(jí)別配置
如果您使用的不是 Slackware Linux,那么配置文件的結(jié)構(gòu)與我談到的結(jié)構(gòu)會(huì)大不相同。除了 inittab 文件,所有 Slackware 的啟動(dòng)配置文件都在 /etc/rc.d/ 目錄中。
缺省情況下,目錄中有 5 個(gè)運(yùn)行級(jí)別 rc.* 腳本,如果將 symlink 從 rc.0 加到 rc.6 ,那么可有 6 個(gè)。
運(yùn)行級(jí)別 init 腳本是:
rc.0 = rc.0 文件是到 rc.6 的 symlink
rc.M = 多用戶(hù)運(yùn)行級(jí)別 2、3 和 5 的 init 腳本
rc.K = “管理”運(yùn)行級(jí)別,單用戶(hù)方式
rc.S = 系統(tǒng)初始化腳本
rc.4 = 運(yùn)行級(jí)別 4(自動(dòng)引導(dǎo)入所選擇的 X 會(huì)話(huà)管理器)的 init 腳本
rc.6 = 重新引導(dǎo)或停止系統(tǒng)時(shí)由 init 執(zhí)行的腳本
目錄中的其余 rc.* 文件用于啟動(dòng)諸如聯(lián)網(wǎng)、內(nèi)核模塊、PCMCIA、Samba、Apache、Netatalk 和 GPM 的系統(tǒng)服務(wù)。如果想要使某個(gè)服務(wù)(如 Apache)完全不能在任何運(yùn)行級(jí)別上使用,請(qǐng)使用 chmod 將文件的許可權(quán)從可執(zhí)行更改成不可執(zhí)行。除去該文件也可以到達(dá)相同效果,但我不推薦這種做法。也許在以后某個(gè)日子您會(huì)發(fā)現(xiàn)要重新啟用服務(wù),但卻不知道怎樣做。
rc.inet1 腳本負(fù)責(zé)啟動(dòng)基本聯(lián)網(wǎng)服務(wù),如設(shè)置主機(jī)名(IP 和 DHCP)。 rc.inet2 腳本負(fù)責(zé)啟動(dòng)所有其它 INET 服務(wù),如 NFS、包轉(zhuǎn)發(fā)、ssh 服務(wù)器和其它聯(lián)網(wǎng)守護(hù)程序。
所有 Slackware /etc/rc.d/rc.* 文件都是 Bash shell 腳本,都可以進(jìn)行手工編輯??墒菍?duì)于聯(lián)網(wǎng),您可能應(yīng)該先嘗試 netconfig 實(shí)用程序。雖然需要手工編輯 /etc/resolv.conf 來(lái)添加多個(gè)名稱(chēng)服務(wù)器,但是它也許能處理您想要執(zhí)行的所有操作,而且它非常易于使用。
如果您是 Linux 初學(xué)者并且要修改系統(tǒng),那么也許應(yīng)該確保您有引導(dǎo)軟盤(pán),并且應(yīng)該復(fù)制您所有想要編輯的 rc.* 文件。如果拿不定主意,我通常會(huì)將文件保存為 rc.*.old ,使它們變成不可執(zhí)行文件。,使它們變成不可執(zhí)行文件。
 回頁(yè)首
使用運(yùn)行的系統(tǒng)
好,現(xiàn)在系統(tǒng)已經(jīng)運(yùn)行,然而您需要在單用戶(hù)方式中執(zhí)行一些操作 -- 該怎么做呢?本文的下一部分將說(shuō)明如何在系統(tǒng)運(yùn)行時(shí)更改運(yùn)行級(jí)別,而不是通過(guò)重新引導(dǎo)來(lái)更改運(yùn)行級(jí)別,而且還說(shuō)明了為什么執(zhí)行此操作以及何時(shí)執(zhí)行。
 回頁(yè)首
telinit 命令:在運(yùn)行的系統(tǒng)上更改運(yùn)行級(jí)別
telinit 命令可以用于更改運(yùn)行級(jí)別。當(dāng)以 root 身份執(zhí)行 telinit S (或者想要更改的任意運(yùn)行級(jí)別)時(shí),它會(huì)更改運(yùn)行級(jí)別,關(guān)閉前一個(gè)運(yùn)行級(jí)別,然后啟動(dòng)下一個(gè)。
某種程度上您正在重新引導(dǎo)系統(tǒng)的一部分。然而,關(guān)閉與重新啟動(dòng)服務(wù)的能力正是 Linux 最可愛(ài)的品質(zhì)之一。想要更改機(jī)器的 IP 地址嗎?沒(méi)問(wèn)題,只要進(jìn)行一些更改,然后重新啟動(dòng)聯(lián)網(wǎng)服務(wù)就行了。只要一切配置正確,備份和運(yùn)行是如此迅速,很難分辯是否做過(guò)更改。在其它即使更改了桌面上的墻紙都必須重新引導(dǎo)的操作系統(tǒng)上,嘗試一下執(zhí)行此操作 :)
確實(shí)需要重新引導(dǎo)或徹底關(guān)閉 Linux 機(jī)器的唯一情況是如果正在添加或更改硬件,假設(shè)您正在使用不能熱插拔的設(shè)備,或者已經(jīng)中斷且需要使機(jī)器脫機(jī)以修復(fù)損壞。與其它操作系統(tǒng)不同,對(duì)于那些不經(jīng)過(guò)重新引導(dǎo)就無(wú)法解決問(wèn)題的產(chǎn)品系統(tǒng),我從來(lái)沒(méi)有看到過(guò)重新引導(dǎo)解決了這些系統(tǒng)上的問(wèn)題。我曾設(shè)法利用諸如 hdparm 的命令來(lái)掛起非生產(chǎn)性機(jī)器,我希望這種情況發(fā)生。
假設(shè)您想要執(zhí)行一些系統(tǒng)維護(hù),而這些系統(tǒng)維護(hù)要求系統(tǒng)處于單用戶(hù)方式。例如,使用 hdparm 調(diào)整硬盤(pán)。第一步是 su (切換)到 root 用戶(hù)。
然后執(zhí)行 telinit 命令使系統(tǒng)進(jìn)入單用戶(hù)方式:
telinit S -t 60
自變量 "-t" 是可選的;它告訴 telinit 在真正切換到單用戶(hù)方式之前等待 60 秒。然而,只要執(zhí)行了該命令,登錄到機(jī)器的任何人都會(huì)看到在控制臺(tái)上出現(xiàn)一個(gè)警告,指出系統(tǒng)將切換運(yùn)行級(jí)別或?qū)⒃?60 秒內(nèi)停機(jī)。
到了 60 秒時(shí),init 會(huì)關(guān)閉單用戶(hù)方式中不使用的進(jìn)程,并使系統(tǒng)進(jìn)入單用戶(hù)方式。然后,將提示您輸入 root 用戶(hù)密碼以執(zhí)行系統(tǒng)維護(hù)。
系統(tǒng)進(jìn)入單用戶(hù)方式所使用的進(jìn)程略有不同。缺省情況下,單用戶(hù)方式要求 init 在控制臺(tái)上調(diào)用 sulogin 命令,并要求在單用戶(hù)方式中使用 root 登錄。
系統(tǒng)進(jìn)入單用戶(hù)方式后,應(yīng)該會(huì)看到如下的消息:
           Give root password for system maintenance
            (or type Control-D for normal startup):
執(zhí)行了維護(hù)之后,可以執(zhí)行以下命令來(lái)使系統(tǒng)回到以前的運(yùn)行級(jí)別:
telinit 3
此命令告訴系統(tǒng)重新進(jìn)入多用戶(hù)運(yùn)行級(jí)別。在此命令中可以用 "2" 或 "4" 來(lái)代替 "3"。在 Slackware 系統(tǒng)上,運(yùn)行級(jí)別 4 將使您進(jìn)入使用 X 窗口顯示管理器之一的多用戶(hù)方式,因此您將直接登錄到 X 窗口。
如果在擁有串行電纜的串行上掛了 UPS,那么就可以讓 UPS 在斷電的情況下向系統(tǒng)發(fā)送一個(gè)信號(hào)。如果您的產(chǎn)品級(jí)系統(tǒng)有一個(gè)很大的文件系統(tǒng),那么這是非常有用的。我曾看到過(guò)當(dāng)沒(méi)有徹底卸載 100GB RAID ext2 文件系統(tǒng)時(shí)(完成 fsck 需要大約 4 小時(shí))發(fā)生了什么情況。另一方面,正確配置的 UPS 可以提醒系統(tǒng)斷電情況,并向 telinit/init 發(fā)送 SIGPWR 信號(hào),這會(huì)使 init 根據(jù)其配置情況將系統(tǒng)切換到單用戶(hù)方式或者完全關(guān)閉系統(tǒng)。
 回頁(yè)首
關(guān)機(jī)
好,由于一直使用計(jì)算機(jī),您已經(jīng)覺(jué)得疲倦了,并打算到 Big Blue Room 去放松一下。幸好,您已經(jīng)知道了在結(jié)束時(shí)直接按電源開(kāi)關(guān)是一大禁忌,但也許還不知道關(guān)閉系統(tǒng)的所有方法。
在 Linux 中,可以使用“三指禮”重新引導(dǎo)系統(tǒng):Ctrl+Alt+Del 鍵控順序會(huì)向系統(tǒng)發(fā)送消息,通知它執(zhí)行關(guān)機(jī)進(jìn)程并重新啟動(dòng)。換句話(huà)說(shuō),除非告訴它不要那樣做。
如果要禁用該鍵控順序,需要注釋掉 inittab 中的一行代碼:
部分 Slackware inittab
# Script to run when going multi user.
rc:2345:wait:/etc/rc.d/rc.M
# What to do at the "Three Finger Salute".
        #ca::ctrlaltdel:/sbin/shutdown -t5 -rf now
        Comment out the above line to disable Ctrl+Alt+Del hotkey.
關(guān)機(jī)時(shí)會(huì)發(fā)生什么情況?調(diào)用 shutdown 命令可以逐步關(guān)閉系統(tǒng)。然而,shutdown 自身并不完成所有工作,它通知 init:應(yīng)該進(jìn)入運(yùn)行級(jí)別 0、1 或 6。
shutdown 命令還通知所有已登錄到機(jī)器上的用戶(hù):機(jī)器將關(guān)閉。在此之后將鎖住 login 命令,因此沒(méi)有別的人可以再啟動(dòng)會(huì)話(huà)。
要使用 shutdown 命令來(lái)關(guān)閉 Linux 系統(tǒng),使用以下命令:
關(guān)機(jī)
shutdown -h now
如果要給用戶(hù)注銷(xiāo)和保存文件的時(shí)間,請(qǐng)使用以下命令:
shutdown -h -t 60
shutdown 命令的 "-h" 開(kāi)關(guān)告訴系統(tǒng)在停機(jī)后徹底關(guān)機(jī)。如果在內(nèi)核中啟用了 APM,那么它會(huì)替您關(guān)閉電源,否則此時(shí)可以放心地按下開(kāi)關(guān)。
"-t" 開(kāi)關(guān)是到系統(tǒng)開(kāi)始關(guān)機(jī)之前所需要的時(shí)間,以秒為單位。如果要放棄關(guān)機(jī),那么使用此開(kāi)關(guān)可以實(shí)現(xiàn)。要停止暫掛關(guān)機(jī),輸入:
shutdown -c
此命令將取消以前的所有 shutdown 命令。如果出于某些原因,您不想關(guān)閉系統(tǒng),但卻要向用戶(hù)發(fā)送“系統(tǒng)即將關(guān)閉”的警告,那么應(yīng)在 shutdown 中使用 "-k" 自變量。
知道如何使用 telinit 和 init 可以在修改 Linux 系統(tǒng)派上用處。本文中,我們討論了更改運(yùn)行級(jí)別和有關(guān) Slackware Linux 發(fā)行版的 init 腳本的基礎(chǔ)知識(shí)。在各個(gè)發(fā)行版之間,目錄結(jié)構(gòu)和文件位置都各不相同,但在閱讀了本文之后,您應(yīng)該能夠掌握系統(tǒng)的 init 腳本,即使您使用的不是 Slackware Linux。
參考資料
您可以參閱本文在 developerWorks 全球站點(diǎn)上的 英文原文.
請(qǐng)?jiān)L問(wèn) Slackware Linux 主頁(yè)。
請(qǐng)訂閱 安裝、配置和定制 Slackware Linux ,這是由 Joe Brockmeier 與其他人合著的 Slackware 初學(xué)者指南。
如需附加背景知識(shí),請(qǐng)閱讀 "How Your Computer Boots"。
請(qǐng)深入了解 Berkeley Software Distribution (BSD) UNIX 和 ATT System V UNIX 以及 Vi 和 Emacs 之間的設(shè)計(jì)差異,這是計(jì)算機(jī)界的 激烈爭(zhēng)論之一。

標(biāo)簽:臨沂 北海 烏蘭察布 防城港 撫州 南昌 邢臺(tái) 韶關(guān)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Slackware Linux init 進(jìn)程》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話(huà)咨詢(xún)

    • 400-1100-266
    惠来县| 双桥区| 东兰县| 施秉县| 双柏县| 年辖:市辖区| 凤庆县| 台山市| 肥城市| 无极县| 仁寿县| 安阳市| 喀喇沁旗| 安塞县| 晋宁县| 阜新| 姜堰市| 新平| 衡阳县| 日喀则市| 大新县| 清徐县| 四子王旗| 泰宁县| 漯河市| 永州市| 中西区| 雷波县| 永新县| 寻乌县| 南丰县| 迁安市| 丰原市| 东源县| 安阳县| 塘沽区| 靖宇县| 咸丰县| 丹寨县| 昭通市| 瓦房店市|