2009年1月13日 星期二

Run level 之變換

在我們完成上面的所有資訊後,其實整個 Linux 主機就已經在等待我們使用者的登入啦! 但是,相信您應該還是會有一點疑問的地方,那就是:『我該如何切換 run level 呢?』會不會很難啊?不會啦!很簡單~ 但是依據執行的時間而有不同的方式啊!

事實上,與 run level 有關的啟動其實是在 /etc/rc.d/rc.sysinit 執行完畢之後。也就是說,其實 run level 的不同僅是 /etc/rc.d/rc[0-6].d 裡面啟動的服務不同而已。不過,依據開機是否自動進入不同 run level 的設定,我們可以說:
  1. 要每次開機都執行某個預設的 run level ,則需要修改 /etc/inittab 內的設定項目, 亦即是『 id:3:initdefault: 』裡頭的數字啊;

  2. 如果僅只是暫時變更系統的 run level 時,則使用 init [0-6] 來進行 run level 的變更。 但下次重新開機時,依舊會是以 /etc/inittab 的設定為準。
假設原本我們是以 run level 5 登入系統的,但是因為某些因素,想要切換成為 run level 3 時, 該怎麼辦呢?很簡單啊,利用 init 3 即可切換。但是 init 3 這個動作到底做了什麼呢? 我們不是說了嗎?事實上,不同的 run level 只是載入的服務不同罷了, 亦即是 /etc/rc.d/rc5.d/ 還有 /etc/rc.d/rc3.d 內的 Sxxname 與 Kxxname 有差異而已。 所以說,當執行 init 3 時,系統會:
  • 先比對 /etc/rc.d/rc3.d/ 及 /etc/rc.d/rc5.d 內的 K 與 S 開頭的檔案;
  • 關閉 /etc/rc.d/rc5.d/ 內不存在於 /etc/rc.d/rc3.d/ 中的服務;
  • 啟動 /etc/rc.d/rc3.d/ 內不存在於 /etc/rc.d/rc5.d/ 中的服務。
也就是說,兩個 run level 都存在的服務就不會被關閉啦!如此一來,就很容易切換 run level 了, 而且還不需要重新開機呢!真方便。那我怎麼知道目前的 run level 是多少呢? 直接在 bash 當中輸入 runlevel 即可啊!
[root@linux ~]# runlevel
N 3
夠簡單的吧! ^_^