主頁 > 知識庫 > Slackware Linux init 進程

Slackware Linux init 進程

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

標簽:電信 綏化 中衛(wèi) 長春 濮陽 清遠 金華 長春

巨人網(wǎng)絡通訊聲明:本文標題《Slackware Linux init 進程》,本文關鍵詞  Slackware,Linux,init,進程,Slackware,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Slackware Linux init 進程》相關的同類信息!
  • 本頁收集關于Slackware Linux init 進程的相關信息資訊供網(wǎng)民參考!
  • 推薦文章