Linux 系統的運行級別(Run Level)

    Linux 操作系統自從開始啓動至啓動完畢需要經歷幾個不同的階段,這幾個階段就叫做 Runlevel,同樣,當Linux操作系統關閉時也要經歷另外幾個不同的 Runlevel,下面詳細介紹一下 Runlevel,並展示一些小技巧來讓Linux系統避免不必要的重啓動。

    Runlevel 可以認爲是系統狀態,形象一點,您可以認爲 Runlevel 有點象微軟的 Windows 操作系統中的正常啓動(Normal)、安全模式(Safemode)和Command prompt only。進入每個 Runlevel 都需要啓動或關閉相應的一系列服務(Services),這些服務(Services)以初始化腳本的方式放置於目錄 /etc/rc.d/rc?.d/或者/etc/rc?.d下面。(?代表 Runlevel 的對應序號)。

    在大多數的Linux發行版本中,通常有8個運行級別系統狀態(Runlevel System State):

  • 0 Halt the system 停機(千萬不要把 initdefault 設置爲0),機器關閉
  • 1 Single user mode 單用戶模式,與 Win9x 下的安全模式類似
  • 2 Basic multi user mode 基本多用戶模式,沒有 NFS 支持
  • 3 Multi user mode 完整的多用戶模式,是標準的運行級
  • 4 None 一般不用,在一些特殊情況下可以用它來做一些事情。例如在筆記本電腦的電池用盡時,可以切換到這個模式來做一些設置。
  • 5 Multi user mode with GUI 就是X11,進到XWindow系統了
  • 6 Reboot the system 重新啓動(千萬不要把initdefault 設置爲6),運行 init 6 機器就會重啓
  • S, s Single user mode

    不同的運行級有不同的用處,也應該根據自己的不同情形來設置。例如,如果丟失了 root 口令,那麼可以讓機器啓動進入單用戶狀態來設置。在啓動後的 lilo 提示符下輸入:

init=/bin/sh rw (或者 linux 1;linux single)

    就可以使機器進入運行級 1 ,並把 root 文件系統掛爲讀寫。他會跳過所有系統認證,讓你使用 passwd 程序來改變 root 口令,然後啓動到一個新的運行級。

    多數的桌面的 Linux 系統缺省的 Runlevel 是 5,用戶登陸時是圖形界面,而多數的服務器版本的 Linux 系統缺省的 Runlevel 是 3,用戶登陸時是字符界面,Runlevel 爲 1 和 2 除了調試之外很少使用,Runlevel 爲 s 和 S 並不是直接給用戶使用,而是用來 Single user mode 作準備。

    Linux 的運行模式比起 Windows 的啓動模式的優勢在於:你可以在系統空閒時使用 .init 工具切換你現在使用的 Runlevel,另外,當你關閉或者啓動 Linux 系統時你已經不知不覺中切換你的 Runlevel ,系統關機進程需要調用 Runlevel (0 或 6)來關閉所有正在運行中的進程。

顯示當前運行模式

    剛入門時,你或許對先前和目前正在使用中的運行模式很好奇,Runlevel命令可以用來顯示這些信息:

$ runlevel

3 5

    Runlevel命令的輸出結果表明最初的運行模式是3,而現在的運行模式是5。

切換運行模式

    切換運行模式使用 telinit 命令(root用戶):

$ telinit

    通常,切換運行模式的目的是重啓某些應用進程,比如 XFree86,將運行模式從5切換到3將終止XFree86以及與之相關的所有進程,然後再把運行模式切換到5,XFree86就可以很乾淨的啓動。在做這些工作之前,請確保所有在XFree86下的工作都已經保存,用root用戶:

$ telinit 3

$ telinit 5

    在鍵入命令之後,你的屏幕可能會顯示一些服務啓動或者停止的信息。

在運行模式中加入啓動服務

    要在某個運行模式中加入一個啓動服務,首先要新建該服務啓動腳本,然後把它放置於/etc/rc.d/init.d或者/etc/init.d/(根據你的 Linux版本有所不同),要將該啓動腳本與運行模式關聯起來,你需要這個運行模式的目錄下建立一個與/etc/rc.d/init.d/下啓動腳本的 symbolic link,文件名的前綴通常爲SXX,XX爲數字,這個數字是用來控制該運行模式下服務的啓動順序。腳本的執行順序是按照數字大小升序執行,就是數字越小越先執行,下面就是一個在運行模式中加入啓動服務具體的例子:

$ cp myservice /etc/rc.d/init.d/

$ ln -s /etc/rc.d/init.d/myservice /etc/rc3.d/S99myservice

    這樣,下次以Runlevel 3啓動時,myservice就會自動啓動。

以某個Runlevel啓動

    你可以自己制定啓動時所進入的Runlevel,如果你的系統使用的是lilo,在啓動命令中將相應的部分爲:

LILO: Linux 5

    如果你使用的是GRUB,在啓動時你可以按住e鍵進入設置模式,相應的位置顯示爲:

kernel /vmlinuz ro root=/dev/hda1 5

Ubuntu 的運行級別

    默認安裝的 Ubuntu Linux 會直接到圖形界面。不過很多時候我並不需要在圖形界面上做事,字符界面的命令行就足夠了。想起在RedHat裏可以通過修改 /etc/inittab 來把默認運行級別(Runlevel)從 5 改到 3 來實現,不幸的是 Ubuntu 中並沒有這個文件。但是,Ubuntu 也是可以兼容 inittab 的,不過需要自己手工建一個罷了。

    Ubuntu 安裝後默認的 Runlevel 爲 2,這個可以用 runlevel 命令查看。因爲 runlevel=2,所以在啓動過程中自動執行 /etc/rc2.d/ 目錄下的以S開頭的腳本。Ubuntu之所以能直接啓動到圖形界面,是由於運行gdm所致。所以,只要把gdm的啓動腳本禁用就可以了,方法就是把文件名的第一個字母 S 改成 K:

cd /etc/rc2.d
sudo mv S30gdm K30gdm

    這是一種方法,而且非常簡單。但更方便的方法是設定一個新的 Runlevel,讓那個新的 Runlevel作爲啓動到字符界面。這樣便於管理。Ubuntu沒有/etc/inittab文件,只好新建一個了,內容只有一行:

id:3:initdefault:

    這樣下次啓動時就會自動運行/etc/rc3.d/目錄下的腳本,而不再是/etc/rc2.d/中的。所以接下來要進入到/etc/rc3.d/中,看看gdm的啓動腳本文件名:

ls -l *gdm

    如果是以 S 打頭的,把文件名改成以 K 打頭的就行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章