作者
Joe
Zonker
Brockmeier (jbroc)
高級編輯
User Friendly Media
提要
Joe Brockmeier 研究了 Slackware Linux init 進程
他討論了系統如何初始化服務
各種運行級別是什麼
以及如何從缺省安裝中添加或除去服務來定制系統
Linux 用戶正日益成熟
這意味著他們想要將系統配置成執行他們希望完成的任務
但目前 Linux 發行版通常都附帶了自動配置的設備和啟動服務
如 Sendmail 或 Apache
這些發行版沒有考慮到的是毫不更改其缺省設置來運行服務
如 Apache
用戶毫不知情
會讓黑客和利用腳本搗亂的人趁虛而入
而且這會用完本可以更好利用的系統資源
比如可以用於 Quake 或您喜歡的編譯器的更多處理器時間
由於缺少控制是件
糟糕的事
因此讓我們看一下 Linux 系統引導時在 init 進程期間
在所涉及的各個運行級別上都發生了什麼
以及如何在系統運行時定制系統或在運行級別之間切換
我們的示例使用 x
平台上的 Slackware Linux 發行版(請參閱本文後面的參考資料)
大多數信息可用於其它 Linux 發行版
但在細節處會略有不同
尤其是
與其說 Slackware 的 init 結構類似於 System V 結構
還不如說它更類似於 BSD UNIX 結構
盡管 Slackware 的最新發行版中的程序做了一些讓步
它們要將服務添加到啟動
但期望這些服務是 System V 目錄結構
(請參閱側欄
BSD 和系統 V init 腳本之間的差異
)
所有進程的父代
當 Linux 機器引導時
究竟會發生什麼?在計算機的 BIOS 完成其任務後
系統會讀取硬盤(或軟盤
或 CD
ROM
或 Zip 驅動器……Linux 是非常靈活的)的第一位
並會遇到引導裝入程序
雖然 GRUB 和其它裝入程序也逐漸變得流行
但通常這就是 Linux 裝入程序 (LInux LOader)
一般稱作 LILO
然後 LILO 將 Linux 內核裝入內存
並開始展示它的魔力
Linux 內核初始化了諸如 SCSI 卡之類的設備
以及其它內核中內置的硬件設備
然後內核運行 init
它是除內核之外在系統運行的第一個進程
如果執行 ps ax | grep
就會看到 init 的進程 ID (PID) 是
裝入 init 之後
它會讀取 inittab 以查看下一步做什麼
inittab 告訴 init 要進入什麼運行級別
以及在哪裡可以找到該運行級別的配置文件
運行級別
運行級別是由系統上的所有服務在某個給定時間定義的(基本上是操作方式)
Linux 可以有幾種操作方式
單用戶方式
單用戶聯網方式
多用戶方式
始於 X 窗口的多用戶方式
等等
這部分將要說明運行級別的概念
Slackware 上有哪些運行級別
已經它們被叫作什麼
運行級別由數字或字母標明
可惜
不是所有的 Linux 發行版在各個運行級別的稱呼問題上都能達成共識
在某些發行版中
運行級別
是使用 X 窗口登錄的多用戶方式
而其它的
如 Slackware
將運行級別
指定成使用控制台登錄的多用戶方式
據我所知
所有 Linux 發行版都認同運行級別
是
停機
運行級別
或
S
是單用戶方式(稍後將詳細說明)
運行級別
是重新引導系統
Slackware 的運行級別如下
運行級別
= 系統停機
運行級別
= 單用戶方式
主要用於維護
運行級別
= 從不使用
運行級別
= 使用控制台登錄的多用戶方式
運行級別
= 使用 X
會話管理器的多用戶方式 (XDM
GDM
KDM)
運行級別
= 從不使用
運行級別
= 重新引導
運行級別 S 或 s = 單用戶方式
這裡沒有記錄運行級別
到
在理論上
它們適用於在需要時定制運行級別
但我還沒有親自嘗試過創建一個
BSD 和 System V init 腳本之間的差異
Slackware Linux 使用 BSD init 腳本說說挺容易
但這究竟表示什麼?
仿真 BSD init 樣式的 Linux 和 UNIX 系統有一個 /etc/rc
d/ 目錄
其中每個運行級別都包含一個 init 腳本
因此
如果要查看或修改運行級別
的 init 腳本
應該編輯文件 /etc/rc
d/rc
另一方面
其 init 腳本基於 System V 的系統對於每個運行級別都有獨立的目錄
因此
如果要編輯運行級別
init 腳本
應查找 /etc/rc
d/ 目錄
並查找該目錄中對應於要修改的服務的腳本
這個差異導致了 Berkeley Software Distribution (BSD) UNIX 和 AT&T System V UNIX 之間的設計差異
這兩者都開創了各自的 UNIX 商業版本
它們連同 Vi 以及 Emacs 一起是計算機界的激烈爭論之一
由於許多 Linux 發行版都喜歡 System V init 布局
Slackware 現在也附帶了目錄和 rc
sysvinit init 腳本
用於保持兼容性
運行級別配置
如果您使用的不是 Slackware Linux
那麼配置文件的結構與我談到的結構會大不相同
除了 inittab 文件
所有 Slackware 的啟動配置文件都在 /etc/rc
d/ 目錄中
缺省情況下
目錄中有
個運行級別 rc
* 腳本
如果將 symlink 從 rc
加到 rc
那麼可有
個
運行級別 init 腳本是
rc
= rc
文件是到 rc
的 symlink
rc
M = 多用戶運行級別
和
的 init 腳本
rc
K =
管理
運行級別
單用戶方式
rc
S = 系統初始化腳本
rc
= 運行級別
(自動引導入所選擇的 X 會話管理器)的 init 腳本
rc
= 重新引導或停止系統時由 init 執行的腳本
目錄中的其余 rc
* 文件用於啟動諸如聯網
內核模塊
PCMCIA
Samba
Apache
Netatalk 和 GPM 的系統服務
如果想要使某個服務(如 Apache)完全不能在任何運行級別上使用
請使用 chmod 將文件的許可權從可執行更改成不可執行
除去該文件也可以到達相同效果
但我不推薦這種做法
也許在以後某個日子您會發現要重新啟用服務
但卻不知道怎樣做
rc
inet
腳本負責啟動基本聯網服務
如設置主機名(IP 和 DHCP)
rc
inet
腳本負責啟動所有其它 INET 服務
如 NFS
包轉發
ssh 服務器和其它聯網守護程序
所有 Slackware /etc/rc
d/rc
* 文件都是 Bash shell 腳本
都可以進行手工編輯
可是對於聯網
您可能應該先嘗試 netconfig 實用程序
雖然需要手工編輯 /etc/nf 來添加多個名稱服務器
但是它也許能處理您想要執行的所有操作
而且它非常易於使用
如果您是 Linux 初學者並且要修改系統
那麼也許應該確保您有引導軟盤
並且應該復制您所有想要編輯的 rc
* 文件
如果拿不定主意
我通常會將文件保存為 rc
*
old
使它們變成不可執行文件
使用運行的系統
好
現在系統已經運行
然而您需要在單用戶方式中執行一些操作
該怎麼做呢?本文的下一部分將說明如何在系統運行時更改運行級別
而不是通過重新引導來更改運行級別
而且還說明了為什麼執行此操作以及何時執行
telinit 命令
在運行的系統上更改運行級別
telinit 命令可以用於更改運行級別
當以 root 身份執行 telinit S(或者想要更改的任意運行級別)時
它會更改運行級別
關閉前一個運行級別
然後啟動下一個
某種程度上您正在重新引導系統的一部分
然而
關閉與重新啟動服務的能力正是 Linux 最可愛的品質之一
想要更改機器的 IP 地址嗎?沒問題
只要進行一些更改
然後重新啟動聯網服務就行了
只要一切配置正確
備份和運行是如此迅速
很難分辯是否做過更改
在其它即使更改了桌面上的牆紙都必須重新引導的操作系統上
嘗試一下執行此操作
確實需要重新引導或徹底關閉 Linux 機器的唯一情況是如果正在添加或更改硬件
假設您正在使用不能熱插拔的設備
或者已經中斷且需要使機器脫機以修復損壞
與其它操作系統不同
對於那些不經過重新引導就無法解決問題的產品系統
我從來沒有看到過重新引導解決了這些系統上的問題
我曾設法利用諸如 hdparm 的命令來掛起非生產性機器
我希望這種情況發生
假設您想要執行一些系統維護
而這些系統維護要求系統處於單用戶方式
例如
使用 hdparm 調整硬盤
第一步是 su(切換)到 root 用戶
然後執行 telinit 命令使系統進入單用戶方式
telinit S
t
自變量
t
是可選的
它告訴 telinit 在真正切換到單用戶方式之前等待
秒
然而
只要執行了該命令
登錄到機器的任何人都會看到在控制台上出現一個警告
指出系統將切換運行級別或將在
秒內停機
到了
秒時
init 會關閉單用戶方式中不使用的進程
並使系統進入單用戶方式
然後
將提示您輸入 root 用戶密碼以執行系統維護
系統進入單用戶方式所使用的進程略有不同
缺省情況下
單用戶方式要求 init 在控制台上調用 sulogin 命令
並要求在單用戶方式中使用 root 登錄
系統進入單用戶方式後
應該會看到如下的消息
Give root password for system maintenance
(or type Control
D for normal startup):
執行了維護之後
可以執行以下命令來使系統回到以前的運行級別
telinit
此命令告訴系統重新進入多用戶運行級別
在此命令中可以用
或
來代替
在 Slackware 系統上
運行級別
將使您進入使用 X 窗口顯示管理器之一的多用戶方式
因此您將直接登錄到 X 窗口
如果在擁有串行電纜的串行上掛了 UPS
那麼就可以讓 UPS 在斷電的情況下向系統發送一個信號
如果您的產品級系統有一個很大的文件系統
那麼這是非常有用的
我曾看到過當沒
From:http://tw.wingwit.com/Article/program/Oracle/201311/18222.html