不知道不緊要啦。當機器開著之後﹐在您看到 RedHat 的開機選單﹐移動上下方向鍵選擇您要進入的系統就可以了﹔如果您這時候按 Ctl+X 鍵﹐則會得到 LILO Boot: 的提示(後面我們提到‘單人模式’的時候會用到)﹐然後按 Tab 鍵﹐也可以看到開機的各項選擇。假如您的系統是按照前面的例子進行安裝的話﹐應該會看到 Linux 和 win(您在安裝時所取的名稱) 這兩項。如果要進入 Linux﹐可以輸入 Linux 再 Enter﹐或直接按 Enter(因為此例中 Linux 被選擇為預設系統了)﹔如果您要進入 Windows﹐可以輸入 win 再按 Enter。 tips﹕如果您原來的系統是 NT 的話﹐有一個要注意的地方﹐就是﹕當增加 Linux partition 之後﹐ 原先 NT 看到的 partition number 或許會有所變更﹐這需要修改 c:/boot.ini 才可以糾正過來。修改的時候﹐基本上您無需理會各句子前面的號碼﹐將 partition( ) 中的號碼換換試試﹐直到可以開機為止。
有些朋友﹐在碰到多重系統安裝的時候﹐會覺得有些疑惑﹐或許只是對 OS loader 不甚了解而已﹐單純將安裝順序換成﹕先 windows 後 linux 就可以了。
而 OS loader 一般都放在 MBR 位置上﹐也就是第一個 cylinder 的第一個 sector 上面﹐這樣﹐系統順利通過 BIOS 之後﹐就會到這裡讀入硬碟的開機資訊﹐也就是載入loader 。在 MBR 上面﹐每次只能放一個 loader﹐如果您先放 windows 的 loader﹐然後放 linux 的﹐MBR 的 loader 就變成是 LILO﹐那您就有一個選單來選擇開機系統。如果先灌 linux 再 windows﹐那 MBR 的 loader 是 windows 的﹐因而沒有選單選擇﹐只能進入 windows。
不過﹐Linux 的 LILO﹐除了放在 MBR 之外﹐還可以放在 boot 的 partition 上面的第一個 block﹐也就是所謂的 superblock是也。那您在安裝的時候﹐就要將 LILO 裝在 boot 的 partition 上面﹔或是修改 /etc/lilo.conf ﹐將 boot=hda 改成boot=hda2 (假設您的 boot partition 是在 hda2 上面)﹐然後再執行 lilo 命令就可以完成。
假如您真的將 LILO 裝在 superblock 上面﹐那您在 MBR 上面的 loader 必須有能力提供選單﹐而且能夠告訴系統到哪裡找到 LILO。抱歉﹐windows 的 loader 都沒有這個能力。其它諸如 partition magic 或 spfdisk 之類的 loader﹐則有這個功能﹐但前提條件是﹕您的 LILO 要裝在 superblock 上面。
當您在 LILO 選擇 Linux之後﹐您會看到一大堆開機過程的報告﹐有興趣可以逐行看看(假如您眼睛夠快的話)。如果開機過程卡在某些服務上面而等上好幾分鐘的話﹐可能您的網路設定不正確﹐最常見的問題是 /etc/hosts 或 DNS沒設定好。為避免這些情況﹐請確定機器在開機的時候﹐啟動程式能夠能連得上指定的伺服器地址。
最終﹐您會看到 Login: 的提示﹐如果您的 X window 在安裝的時候設定好了﹐那麼登錄畫面會是圖形界面的。這時候您可以用 ‘ root ’進行登錄﹐然後輸入您在安裝時設定的 root 密碼。之後﹐整個 Linux系統就是您的啦﹗ tips﹕不過﹐任何時候﹐我們都不鼓勵直接用 root 登錄﹐因為它的權限太大﹐會在系統安全上構成威脅。我們通常是用普通用戶進行登錄(也就是安裝的時候所設定的帳號)﹐然後真的碰到系統設定的時候﹐才用 su 或 sudo 命令切換為 root 身份執行。不過﹐這裡的例子﹐大部份是教您設定伺服器的﹐通常都需要 root 來執行﹐只是日後換到真正的工作系統之後﹐就請儘量避免用 root 來工作了。
至於機器如何從啟動到成功載入﹐如果我們對這個過程了解的話﹐相信在日後的管理﹐或遇到問題的時候會非常有幫助。下面不妨讓我們看看 Linux 的開機過程和其中的一些選項。
首先﹐當電源打開之後﹐機器會首先經過 POST 檢查﹐然後從 CMOS 載入 BIOS﹐以確定最基本的硬體架構﹐如時鐘和硬碟資訊等。
然後會找到 MBR﹐載入 boot loader﹐以確定啟動哪一個作業系統。
當作業系統選定之後﹐LOADER 會告訴機器到那裡載入作業系統的核心程式。
當核心程式載入之後﹐機器基本上就交由核心處理了。核心程式首先要載入檔案系統﹐然後第一個執行的程式就是 init (它是所有程式的 parrent )﹐init 的第一個動作是找到 /etc/rc.d/rc.sysinit 並執行之。
這個 rc.sysinit 程式首先是執行 /sbin/initlog 並輸出 $LOGLEVEL 變數﹐以決定記錄檔的信息量。
接著檢查 /dev/.devfsd 和 /sbin/devfsd 這兩個檔案﹐以決定系統是否使用 devfs 。
然後設定 PATH 環境。
然後檢查 /etc/sysconfig/network 檔是否存在﹐然則根據設定檔設定網路環境﹐否則用 localhost 命名系統。
再來是執行 /etc/rc.d/init.d/functions 這隻 script ﹐以提供其後的 shell 程式所使用的一些變數和功能。
然後載入 keymap﹐按照您安裝時指定的鍵盤資訊來確定您的鍵盤類型。
執行 /sbin/setsysfont 來設定系統使用的字型。
啟動系統的置換(swap)空間。至此﹐系統之主機名稱(hostname)和網域名稱(domain)﹐將作為環境變數的依據。
然後 rc.sysinit 會檢查 /fsckoptions 這個檔是否存在﹐然則﹐會改變這個檔的中的一個變數值﹔如果 /forcefsck 檔案存在的話﹐就會在這個變數值前面增加一個旗標﹐這樣會導致後面的步驟強迫系統對檔案系統進行檢查。
接下來﹐會檢查 /fastboot 是否存在﹐然則﹐系統會略過檔案系統的檢查步驟﹔否則﹐系統會對 / ( 也就是 root) 進行一個完整的檢查。
之後﹐系統會執行 mount -t proc /proc /proc 命令﹐為核心掛載一個特殊的檔案系統﹐它完全建立在記憶體之上。每次關機都會消失﹐而每次開機才被建立。其中的資料﹐純粹是給核心使用的﹐其中一些設定﹐會根據系統設定檔進行配置。
完成這個動作之後﹐接下來是對 Plug and Play 設備的檢測。如果經過特別設定﹐還會執行 isapnp 程式來檢查 ISA 類型的 PnP 設備。
現在﹐檔案系統的 / 才掛載為完整的讀和寫模式﹐並更新 quota 資訊﹐同時在 / 上面實施 quota 限制。
再來呢﹐系統會清掉 IN_INITLOG 變數﹐如果 /etc/HOSTNAME 檔不存在﹐則將 HOSTNAME 的變數值作為該檔的內容。
再來是清空 mtab﹐並將 / 檔案系統和 /proc 置於其中。系統通常根據 /etc/fstab 來判定要掛載的檔案系統在哪裡﹐而 mtab 是一個檔案﹐算是從 /etc/fstab 提煉出來真正給系統使用的版本吧。
然後﹐系統會載入一系列的核心模組。一旦完成﹐除非前面的 /fastboot 存在﹐否則系統會對 / 之外的所有檔案系統進行檢查。除了 NFS 之外﹐所有分區都會完成掛載﹐並且非 / 分區的 quota 也會打開。
到這裡﹐系統會砍掉一些檔案﹐以清理這次啟動﹐同時也是為下次啟動作準備。前面提到的 /fastboot 和檔案系統檢查選項都會清掉﹐同時﹐ /var/lock 其下的一些 lock 檔也會移除﹐/var/run 裡面的陳舊行程 ID 也會砍掉﹐更多在 /tmp 裡面的 lock 檔也會砍光。這樣﹐rc.sysinit 可以說為系統安排好一切了﹕設定好系統時鐘､啟用置換空間､載入相應模組､並根據 /etc/sysconfig/desktop 來決定 X 系統使用的視窗管理系統(除非使用者另行設定)。
關於 rc.sysinit 在啟動過程中所顯示的所有信息﹐都會存放到 /var/log/dmesg 裡面去。
此時﹐rc.sysinit 已經完成準備工作﹐並將系統交還 /sbin/init 程式﹐然後根據 /etc/inittab 選擇預設的 run level (這個容後解釋)﹐以決定執行哪些服務程式。具體要執行的程式﹐按照 /etc/rc.d/rcX.d/ ( X 代表不同的 run level 號碼)目錄裡面的 script 內容而定。而最後一個要執行的 script﹐則是 /etc/rc.d/rc.local 。並執行 /sbin/loglevel 以確定系統的記錄等級(級別越高﹐記錄越詳細)。
Tips﹕在 /etc/rc.d/ 目錄下的 rc.local﹐有點像 DOS 裡面的 autoexec.bat ﹐如果您有哪些在開機的時候需要執行的系統設定﹐可以將命令行﹐或 script 寫在這裡。比方說﹐您在用別台機器 telnet 進來的時候﹐會看到機器目前的作業系統資訊(這或許對別有用心的人非常有用)﹐您單純以為修改 /etc/issue.net 的內容就可以解決掉﹔但發現重新開機之後﹐檔案又復原了。呵~~ 這就是 rc.local 搞的鬼啦﹕當您修改好 issue.net 之後﹐還不要忘記修改 rc.loal 這個檔﹐將其中一行 cp -f /etc/issue /etc/issue.net 註解起來。
最後﹐init 將系統交由 login 程式接管﹐正式完成開機使命。
Tip﹕有時候您不正常關機﹐會造成檔案損毀的現像﹐系統在開機的時候會嘗試自動修復。如果自動修復不成功﹐則會停下來要您輸入 root 密碼﹐執行 fsck 程式進行手工修復。
不過﹐小心哦﹕有時候第一個問題可能告訴您一些警告﹐然後說按 y 進行 cancel﹐那您就只好第一個按 n﹐然後逐個按 y 了。
假如您對上面的描述不是很理解﹐不用擔心﹐儘可略過您不懂的對方﹐等日後對系統有更充份的了解之後﹐再回來重拾靈感好了。不過﹐對開機過程的了解程度﹐會影像到您日後的系統管理和調整技巧﹐尤其是在進行除錯的時候。建議您最好將開機過程了解透切一些﹐是絕對有百利而無一害的。
不過﹐這樣您就一定不能將 root 密碼忘記囉~~~ ^_^ tips﹕您還可以修改 lilo.conf﹐加上密碼﹐這樣別人選好 LILO 選單之後﹐只有知道密碼才能載入(不過﹐如果您想要執行遠端重開機的話﹐有麻煩)。這部份留待日後我們談到 lilo.conf 的時候再介紹吧。不過﹐有經驗的用戶﹐還是知道如何用其它辦法進行開機的啦。所以﹐實體上的安全還是至關重要的。
如果您已經在一個 run level 裡面了﹐這時候要換到另一個 level 去﹐除了重新開機之外﹐您也可以直接用 init 命令來轉換﹐如輸入 init 1 就會切換到單人模式去﹐然後再輸入 init 3 就回到多人文字模式去。有機會不妨玩玩看。
那麼﹐究竟不同的 run level 是如何為系統配置出不同的環境呢﹖如果您有興趣知道的話﹐請看看 /etc/rc.d/ 目錄下面﹐分別有著 rcX.d 的子目錄﹐其中的 X 就是不同 run level 的號碼了。然後再看看 rcX.d 目錄裡面的檔案﹐您會發現有兩類檔案﹕其一是以 S 開頭的﹐而另外則是以 K 開頭的。這些檔案都是一些 script﹐如果以 S 開頭的話﹐那是在進入(Startup)該 level 的時候要執行的﹐其執行順序是根據 S 後面的數字來決定﹐數值越小﹐越被優先執行。您千萬不要隨便亂改這些數字哦﹐因為有些 script 之間是有相依關係的﹐必須等前面的 script 執行妥當之後﹐才能執行後面的 script。而那些以 K 開頭呢﹖K 是 Kill 的意思﹐沒錯啦﹐就是在退出該 level 的時候要執行的﹐順序也是以數字為依據。
第一個命令是在 run level 3 將 pcmcia 服務打開(也就是設定為 S 開頭的服務)﹔第二行則是關閉(也就手設定為 K 開頭)﹔第三行則將之刪除(沒有 S 也沒有 K )。透過靈活的組合﹐您可以輕鬆的控制各個 run level 所執行的服務程式。建議您 man chkconfig 詳細看看它的用法。
要注意﹕這兩句前面的 ‘ # ’符號不能拿掉哦﹗第一行的第一堆數字是說要作用於哪些 run level 上面﹔而中間的數字則是 link 到各 rcX.d 目錄後的以 " S " 開頭的數字﹔最後一組數字則是 " K " 開頭的數字。第二行可以隨便寫﹐關於 daemon 的說明文字就是了。
如果您仔細比較不同的 rcX.d 目錄﹐您會發現它們的 script 數目和順序都不太一樣﹗沒錯啦﹐就是這些不一樣才讓系統獲得不同的配置。不過﹐如果您再仔細檢查這些檔案﹐其實它們都是一些 links (這個我們在介紹檔案系統的時候再說)﹐歸跟結底﹐這些 script 都集中放在 /etc/rc.d/init.d/ 目錄裡面﹐然後根據不同的 level 而‘分身’在不同的 rcX.d 目錄中而已。這個﹐等我們日後對 script 和 links 有一定了解之後﹐就比較清楚了。如果您現在不大理解﹐那沒關係﹐知道不同的 run level 要對應到哪個 rcX.d 目錄就好。
如果用 r 代替 h 的話﹐會進行重新啟動﹐不過﹐您可以用 reboot 這個指令代替﹐或可以按 ctl+alt+del (這個也不建議使用﹐更要注意所有資料已回存好和程式都關閉妥當)。
其實，常常遇到有人問說，shutdown -r 與 reboot 與 halt 這些指令的關係。
還是呼叫 reboot 來執行的。
而 reboot 指令則不，將會立即 reboot。
halt 也是一樣，將會立即關機。
這兩個指令無法送出訊息到 tty.. 等等。
其實 halt 指令，預設是會執行 poweroff 的，所以會將電源切掉。
等您已經會得正常的開機和關機之後﹐我才可以說﹕您可以放心進行學習了。