學習關閉或重啟您的 Linux 系統,警告使用者系統正在關閉,切換到一個多少有點限制性的運行層級。這一流程對於許多Linux 愛好者來說,還很陌生。下面請IBM的進階程式員Ian Shields具體介紹下Linux的運行層級、關機和重新啟動。
概述
在本文中,學習關閉或重啟您的 Linux 系統,警告使用者系統正在關閉,請切換到單一使用者模式或者一個多少有點限制性的運行層級。學習:
•設定預設運行層級
•運行層級間的變化
•改為單一使用者模式
•從命令列關閉或重啟系統
•警告使用者主要系統事件,包括切換到另一個運行層級
•適當地終止進程
除非特殊說明,本文中的樣本使用帶有 2.6.26 核心的 Fedora 8。upstar 樣本使用的是帶有 2.6.34 核心的 Fedora 13,或者是帶有 2.6.35 核心的 Ubuntu 10.10。您的結果在其他系統上可能有所不同。
先決條件
為了最有效地利用本系列中的文章,您應該具有基本的 Linux 知識,並需要準備一個 Linux 系統,用於練習本文介紹的命令。有時候不同版本的程式輸出格式不同,因此您所得到的結果未必總是與這裡所示的清單和圖相同。特別是,最近出現的系統已經改變了很多傳統 System V init 進程使用者所熟悉的內容(更多細節見 Init vs. Upstart)。本文是針對傳統 System V init 進程的,只對 upstar 的區別進行了粗略的概述。
運行層級
運行層級 定義了在 Linux 系統的目前狀態(或運行層級)可以完成的任務。每個 Linux 系統支援 3 個基本運行層級,外加一個或多個用於正常操作的運行層級。基本運行層級如 表 1 所示。
表 1. Linux 基本運行層級
| 層級 |
目的 |
| 0 |
關閉(或終止)系統 |
| 1 |
單一使用者模式:通常又稱為 s 或 S |
| 6 |
重啟系統 |
除了這些基本的運行層級之外,各個發行版之間的運行層級使用也有所不同。一個命令使用集合如 表 2 所示。
表 2. 其他命令 linux 運行層級
| 層級 |
目的 |
| 2 |
沒有網路的多使用者模式 |
| 3 |
有網路的多使用者模式 |
| 5 |
有網路和 X Window System 的多使用者模式 |
Slackware 發布版使用運行層級 4 而不是 5,因為整個系統正運行 X Window 系統。Debian 及其衍生產品,比如 Ubuntu,對於任何多使用者模式都使用單個運行層級,通常是運行層級 2。務必查閱您版本的文檔。
預設運行層級
當一個 Linux 系統啟動時,預設運行層級由 /etc/inittab 下的 id: 條目確定。 清單 1 說明了一個系統(比如 Fedora 8 或 openSUSE 11.2)典型條目,這兩個系統都是為 X Window System 使用運行層級 5。
清單 1. /etc/inittab 中的預設運行層級
[root@pinguino ~]# grep "^id:" /etc/inittab
id:5:initdefault:
如果您想要您的系統以不同的運行層級啟動,比如說運行層級 3,編輯該值。
改變運行層級
有好幾種方法可以改變運行層級。為了進行一個永久的改變,您可以編輯 /etc/inittab 並改變預設運行層級,正如您剛才在上面看到的。
如果您只需要在一次引導中將您的系統提升到一個不同的運行層級,您可以這樣做。例如,假設您剛剛安裝了一個新核心,在使用新核心重啟系統後需要建立一些核心模組,但是應該在啟動 X Window System 之前。您可能想要將您的運行層級提升為層級 3 來完成這一任務。您可以通過編輯核心線(GRUB)或在選擇的系統名後(LILO)添加一個參數來在引導時進行這一操作。使用一個一位元來指出期望的運行層級(在這裡是 3)。我們將通過一個 GRUB 執行個體來介紹具體過程。假設您的 /boot/grub/menu.lst 檔案含有 清單 2 所示的片段。
清單 2. 啟動 Fedora 8 的典型 GRUB 片段
title Fedora (2.6.26.8-57.fc8)root (hd0,5)kernel /boot/vmlinuz-2.6.26.8-57.fc8 ro root=LABEL=FEDORA8 rhgb quietinitrd /boot/initrd-2.6.26.8-57.fc8.img
要想讓系統升級到運行層級 3,等待直至引導項出現,選擇這個條目然後輸入 ‘e’ 來編輯這個條目。根據您的 GRUB 選項,您可能需要按下一個鍵來顯示引導項,然後也輸入一個 ‘p’ 和一個密碼來解鎖編輯。Fedora 8 系統上 GRUB 螢幕看起來像 圖 1 這樣。
圖 1. 在 GRUB 中選擇一個引導選項
在這個樣本中,您現在應該可以看到以 root、kernel、initrd 開始的行出現。將游標移動到以 “kernel” 開始的行,然後輸入 ‘e’ 來編輯這一行。Fedora 8 系統上的 GRUB 螢幕現在如 圖 2 所示。
圖 2. 選擇核心項進行編輯
最後將游標移動到這一行的末尾,然後添加一個空格和數字 ‘3’。如果需要的話您可以刪除 ‘quiet’,或者根據需要修改任何其他參數。Fedora 8 系統上的 GRUB 螢幕現在如 圖 3 所示。
圖 3. 設定啟動運行層級為 3
最後,按下 Enter 鍵來儲存修改,然後輸入 ‘b’ 來引導系統。
注意: 使用 LILO 或 GRUB2 和使用 GRUB 的步驟有所不同,但是編輯核心啟動方法的基本原理是一樣的,即使其他系統或其他版本上的 GRUB 介面和這裡所顯示的介面大不相同。提示資訊通常會對您有所協助。
當您在運行層級 3 下完成了您的安裝工作時,您可能想要切換到運行層級 5。幸運的是,您不需要重啟系統。您可以使用 telinit 命令來切換到另一個運行層級。使用 runlevel 命令可以顯示之前和目前的運行層級。如果輸出的一個字元是 ‘N’,運行層級還不能改變,因為系統正在被引導。 清單 3 顯示了驗證和更改運行層級。
清單 3. 驗證和更改運行層級
[root@pinguino ~]# runlevelN 3[root@pinguino ~]# telinit 5
輸入 telinit 5 之後您將看到幾個訊息一閃而過,您的介面將切換到已配置的圖形化登入介面。開啟一個終端視窗,然後驗證運行層級是否已經修改,如 清單 4 所示。
清單 4.確認新的運行層級
[root@pinguino ~]# runlevel3 5
如果您使用 ls 命令來顯示一個很長的 telinit 命令清單,您將看到它實際上是一個連結到 init 命令的符號連結。我們將在 清單 5 中對此作一說明。
清單 5. telinit 只是一個連結到 init 的符號連結
[root@pinguino ~]# ls -l $(which telinit)lrwxrwxrwx 1 root root 4 2008-04-01 07:50 /sbin/telinit -> init
可執行檔 init 知道它是否稱為 init 或 telinit,然後進行相應調整。因為 init 作為 PID 1 在引導時運行,它也非常智能,知道您隨後什麼時候會使用 init 調用它,而不是使用 telinit。如果您這樣做了,它就會假設您希望它表現得像已經調用了 telinit。例如,您可能會使用 init 5 而不是 telinit 5 來切換到運行層級 5。
單一使用者模式
相比個人電腦作業系統,比如 DOS 或 Windows,Linux 本身是一個多使用者系統。然而,有時候這可能會成為一個問題,比如,當您需要恢複一個重要檔案系統或者資料庫時,或者安裝和測試某個新軟體時。運行層級 1,單一使用者模式 是您在這些情況下的最佳答案。實際實現根據不同版本有所變化,但是您通常只使用一個很小的系統簡單地啟動。通常這裡沒有連網,沒有(或者非常少)守護進程運行。在一些系統上,您必須通過登入來進行認證,但在其他系統上您可以直接以根使用者開始操作 shell 提示符。單一使用者模式可能是一個救生圈,也可能是毀壞您的系統,因此,不管任何時候,當您使用根使用者許可權時都應該小心注意。完成後立即重新啟動到一個正常多使用者模式。
和切換到正常多使用者運行層級一樣,您也可以使用 telinit 1 切換到單一使用者模式。正如 表 1 所述,‘s’ 和 ‘S’ 是運行層級 1 的別名,因此您可以使用 telinit s 來代替。