linux 正確的關機方法

上一篇 / 下一篇  2010-03-29 15:05:51 / 个人分类:linux

OK!大概知道開機的方法,也知道基本的指令操作,而且還已經知道線上查詢了,好累呦! 想去休息呢!那麼如何關機呢?我想,很多朋友在DOS的年代已經有在玩電腦了! 在當時我們關掉DOS的系統時,常常是直接關掉電源開關,而 Windows 在你不爽的時候,按著電源開關四秒也可以關機!但是在Linux則相當的不建議這麼做!

Why?在 Windows (非 NT 主機系統) 系統中,由於是單人假多工的情況,所以即使你的電腦關機, 對於別人應該不會有影響才對!不過呢,在 Linux 底下,由於每個程序 (或者說是服務) 都是在在背景下執行的,因此,在你看不到的螢幕背後其實可能有相當多人同時在你的主機上面工作, 例如瀏覽網頁啦、傳送信件啦以 FTP 傳送檔案啦等等的,如果你直接按下電源開關來關機時, 則其他人的資料可能就此中斷!那可就傷腦筋了!

此外,最大的問題是,若不正常關機,則可能造成檔案系統的毀損(因為來不及將資料回寫到檔案中,所以有些服務的檔案會有問題!)。所以正常情況下,要關機時需要注意底下幾件事:

  • 觀察系統的使用狀態
    如果要看目前有誰在線上,可以下達『who』這個指令,而如果要看網路的連線狀態,可以下達 『 netstat -a 』這個指令,而要看背景執行的程序可以執行『 ps -aux 』這個指令。使用這些指令可以讓你稍微瞭解主機目前的使用狀態!當然囉,就可以讓你判斷是否可以關機了 (這些指令在後面Linux常用指令中會提及喔!)

  • 通知線上使用者關機的時刻
    要關機前總得給線上的使用者一些時間來結束他們的工作,所以,這個時候你可以使用 shutdown 的特別指令來達到此一功能。

  • 正確的關機指令使用
    例如 shutdown 與 reboot 兩個指令!

所以底下我們就來談一談幾個與關機/重新開機相關的指令囉!

  • 將資料同步寫入硬碟中的指令: sync
  • 慣用的關機指令: shutdown
  • 重新開機,關機: reboot, halt, poweroff

sync

第零章、計算機概論裡面我們談到過資料在電腦中運作的模式, 所有的資料都得要被讀入記憶體後才能夠被CPU所處理,但是資料又常常需要由記憶體寫回硬碟當中(例如儲存的動作)。 由於硬碟的速度太慢(相對於記憶體來說),如果常常讓資料在記憶體與硬碟中來回寫入/讀出,系統的效能就不會太好。

因此在Linux系統中,為了加快資料的讀取速度,所以在預設的情況中, 某些已經載入記憶體中的資料將不會直接被寫回硬碟,而是先暫存在記憶體當中,如此一來, 如果一個資料被你重複的改寫,那麼由於他尚未被寫入硬碟中,因此可以直接由記憶體當中讀取出來, 在速度上一定是快上相當多的!

不過,如此一來也造成些許的困擾,那就是萬一你的系統因為某些特殊情況造成不正常關機 (例如停電或者是不小心踢到power)時,由於資料尚未被寫入硬碟當中,哇!所以就會造成資料的更新不正常啦! 那要怎麼辦呢?這個時候就需要sync這個指令來進行資料的寫入動作啦! 直接在文字介面下輸入sync,那麼在記憶體中尚未被更新的資料,就會被寫入硬碟中!所以,這個指令在系統關機或重新開機之前, 很重要喔!最好多執行幾次!

雖然目前的 shutdown/reboot/halt 等等指令均已經在關機前進行了 sync 這個工具的呼叫, 不過,多做幾次總是比較放心點~呵呵~

[root@www ~]#sync
Tips:
事實上sync也可以被一般帳號使用喔!只不過一般帳號使用者所更新的硬碟資料就僅有自己的資料, 不像root可以更新整個系統中的資料了。
鳥哥的圖示

小標題的圖示慣用的關機指令: shutdown

由於Linux的關機是那麼重要的工作,因此除了你是在主機前面以tty7圖形介面來登入系統時, 不論用什麼身份都能夠關機之外,若你是使用遠端管理工具(如透過pietty使用ssh服務來從其他電腦登入主機), 那關機就只有root有權力而已喔!

嗯!那麼就來關機試試看吧!我們較常使用的是shutdown這個指令,而這個指令會通知系統內的各個程序 (processes),並且將通知系統中的run-level內的一些服務來關閉。shutdown可以達成如下的工作:

  • 可以自由選擇關機模式:是要關機、重新開機或進入單人操作模式均可;
  • 可以設定關機時間: 可以設定成現在立刻關機, 也可以設定某一個特定的時間才關機。
  • 可以自訂關機訊息:在關機之前,可以將自己設定的訊息傳送給線上 user 。
  • 可以僅發出警告訊息:有時有可能你要進行一些測試,而不想讓其他的使用者干擾, 或者是明白的告訴使用者某段時間要注意一下!這個時候可以使用 shutdown 來嚇一嚇使用者,但卻不是真的要關機啦!
  • 可以選擇是否要 fsck 檢查檔案系統 。

那麼shutdown的語法是如何呢?聰明的讀者大概已經開始找『男人』了!沒錯,隨時隨地的 man 一下,是很不錯的舉動!好了,簡單的語法規則為:

[root@www ~]#/sbin/shutdown [-t 秒] [-arkhncfF] 時間 [警告訊息]選項與參數:
-t sec : -t 後面加秒數,亦即『過幾秒後關機』的意思
-k     : 不要真的關機,只是發送警告訊息出去!
-r     : 在將系統的服務停掉之後就重新開機(常用)
-h     : 將系統的服務停掉後,立即關機。 (常用)
-n     : 不經過 init 程序,直接以 shutdown 的功能來關機
-f     : 關機並開機之後,強制略過 fsck 的磁碟檢查
-F     : 系統重新開機之後,強制進行 fsck 的磁碟檢查
-c     : 取消已經在進行的 shutdown 指令內容。
時間   : 這是一定要加入的參數!指定系統關機的時間!時間的範例底下會說明。
範例:[root@www ~]#/sbin/shutdown -h 10 'I will shutdown after 10 mins'# 告訴大家,這部機器會在十分鐘後關機!並且會顯示在目前登入者的螢幕前方!
# 至於參數有哪些呢?以下介紹幾個吧!

此外,需要注意的是,時間參數請務必加入指令中,否則shutdown會自動跳到 run-level 1 (就是單人維護的登入情況),這樣就傷腦筋了!底下提供幾個時間參數的例子吧:

[root@www ~]#shutdown -h now立刻關機,其中 now 相當於時間為 0 的狀態[root@www ~]#shutdown -h 20:25系統在今天的 20:25 分會關機,若在21:25才下達此指令,則隔天才關機[root@www ~]#shutdown -h +10系統再過十分鐘後自動關機[root@www ~]#shutdown -r now系統立刻重新開機[root@www ~]#shutdown -r +30 'The system will reboot'再過三十分鐘系統會重新開機,並顯示後面的訊息給所有在線上的使用者[root@www ~]#shutdown -k now 'This system will reboot'僅發出警告信件的參數!系統並不會關機啦!嚇唬人!

小標題的圖示重新開機,關機: reboot, halt, poweroff

還有三個指令可以進行重新開機與關機的任務,那就是reboot, halt, poweroff。 其實這三個指令呼叫的函式庫都差不多,所以當你使用『man reboot』時,會同時出現三個指令的用法給你看呢。 其實鳥哥通常都只有記shutdown與reboot這兩個指令啦!不過使用poweroff這個指令卻比較簡單就是了!^_^ 通常鳥哥在重新開機時,都會下達如下的指令喔:

[root@www ~]#sync; sync; sync; reboot

既然這些指令都能夠關機或重新開機,那他有沒有什麼差異啊?基本上,在預設的情況下, 這幾個指令都會完成一樣的工作!(因為halt會先呼叫shutdown,而shutdown最後會呼叫halt!)。 不過,shutdown可以依據目前已啟動的服務來逐次關閉各服務後才關機;至於halt卻能夠在不理會目前系統狀況下, 進行硬體關機的特殊功能!你可以在你的主機上面使用root進行底下兩個指令來關機,比較看看差異在哪裡喔!

[root@www ~]#shutdown -h now[root@www ~]#poweroff -f

更多halt與poweroff的選項功能,請務必使用man去查詢一下喔!


小標題的圖示切換執行等級: init

本章上頭有談到過關於run level的問題。之前談到的是系統運作的模式,分為純文字(run level 3)及圖形介面模式(run level 5)。除了這兩種模式外,有沒有其他模式呢?其實Linux共有七種執行等級, 七種等級的意義我們在後面會再談到。本章你只要知道底下四種執行等級就好了:

  • run level 0:關機
  • run level 3:純文字模式
  • run level 5:含有圖形介面模式
  • run level 6:重新開機

那如何切換各模式呢?可以使用init這個指令來處理喔!也就是說,如果你想要關機的話, 除了上述的shutdown -h now以及poweroff之外,你也可以使用如下的指令來關機:

[root@www ~]#init 0

大標題的圖示開機過程的問題排解

事實上,Linux主機是很穩定的,除非是硬體問題與系統管理員不小心的動作,否則, 很難會造成一些無法挽回的錯誤的。但是,畢竟我們目前使用的可能是練習機,會常常開開關關的, 所以確實可能會有一些小問題發生。好了,我們先來簡單的談一談,如果無法順利開機時, 你應該如何解決。要注意的是,底下說到的內容很多都還沒有開始介紹, 因此,看不懂也不要太緊張~在本書全部都讀完且看第二遍時,你自然就會有感覺了! ^_^


小標題的圖示
檔案系統錯誤的問題

在開機的過程中最容易遇到的問題就是硬碟可能有壞軌或檔案系統發生錯誤(資料損毀)的情況, 這種情況雖然不容易發生在穩定的Linux系統下,不過由於不當的開關機行為, 還是可能會造成的,常見的發生原因可能有:

  • 最可能發生的原因是因為斷電或不正常關機所導致的檔案系統發生錯誤, 鳥哥的主機就曾經發生過多次因為跳電,家裡的主機又沒有安裝不斷電系統, 結果就導致硬碟內的檔案系統錯誤!檔案系統錯誤並非硬體錯誤,而是軟體資料的問題喔!

  • 硬碟使用率過高或主機所在環境不良也是一個可能的原因, 例如你開放了一個FTP服務,裡面有些資料很有用, 所以一堆人搶著下載,如果你又不是使用較穩定的SCSI介面硬碟,僅使用一般PC使用的硬碟, 雖然機率真的不高,但還是有可能造成硬碟壞軌的。此外,如果主機所在環境沒有散熱的設備, 或者是相對濕度比較高的環境,也很容易造成硬碟的損壞喔!

解決的方法其實很簡單,不過因為出錯磁區所掛載的目錄不同,處理的流程困難度就有差異了。 舉例來說,如果你的根目錄『/』並沒有損毀,那就很容易解決,如果根目錄已經損毀了,那就比較麻煩!


  • 如果根目錄沒有損毀:

假設你發生錯誤的partition是在/dev/sda7這一塊,那麼在開機的時候,螢幕應該會告訴你:press root password or ctrl+D :這時候請輸入root的密碼登入系統,然後進行如下動作:

  • 在游標處輸入root密碼登入系統,進行單人單機的維護工作;
  • 輸入『 fsck /dev/sda7 』(fsck 為檔案系統檢查的指令,/dev/sda7為錯誤的partition,請依你的情況下達參數), 這時螢幕會顯示開始修理硬碟的訊息,如果有發現任何的錯誤時,螢幕會顯示:clear [Y/N]?的詢問訊息,就直接輸入 Y 吧!
  • 修理完成之後,以 reboot 重新開機囉!


  • 如果根目錄損毀了

一般初學者喜歡將自己的硬碟只劃分為一個大partition,亦即只有根目錄, 那檔案系統錯誤一定是根目錄的問題囉!這時你可以將硬碟拔掉,接到另一台Linux系統的電腦上, 並且不要掛載(mount)該硬碟,然後以root的身份執行『 fsck /dev/sdb1 』(/dev/sdb1 指的是你的硬碟裝置檔名,你要依你的實際狀況來設定),這樣就 OK 囉!

另外,也可以使用近年來很熱門的Live CD,也就是利用光碟開機就能夠進入Linux作業系統的特性, 你可以前往:『http://knoppix.tnc.edu.tw/』 這個網站來下載,並且燒錄成為CD,這個時候先用Live CD光碟開機,然後使用fsck去修復原本的根目錄, 例如: fsck /dev/sda1 ,就能夠救回來了!


  • 如果硬碟整個壞掉:

如果硬碟實在壞的離譜時,那就先將舊硬碟內的資料,能救出來的救出來,然後換一顆硬碟來重新安裝Linux吧! 不要不願意換硬碟啊!啥時後硬碟會壞掉誰也說不準的!

那麼硬碟該如何預防發生檔案系統錯誤的問題呢?可以參考底下說明:

  • 妥善保養硬碟
    例如:主機通電之後不要搬動,避免移動或震動硬碟;盡量降低硬碟的溫度,可以加裝風扇來冷卻硬碟; 或者可以換裝 SCSI 硬碟。

  • 劃分不同的partition
    為什麼磁碟分割這麼重要!因為Linux每個目錄被讀寫的頻率不同,妥善的分割將會讓我們的Linux更安全! 通常我們會建議劃分下列的磁碟區塊:
    • /
    • /boot
    • /usr
    • /home
    • /var
    這樣劃分有些好處,例如/var是系統預設的一些資料暫存或者是cache資料的儲存目錄, 像 e-mail 就含在這裡面。如果還有使用proxy時,因為常常存取,所以有可能會造成磁碟損壞, 而當這部份的磁碟損壞時,由於其他的地方是沒問題的,因此資料得以保存,而且在處理時也比較容易!

小標題的圖示
忘記 root 密碼:

常常有些朋友在設定好了Linux之後,結果root密碼給他忘記去!要重新安裝嗎?不需要的, 你只要以單人維護模式登入即可更改你的root密碼喔!由於lilo這個開機管理程式已經很少見了, 這裡鳥哥使用grub開機管理程式作為範例來介紹囉!

先將系統重新開機,在讀秒的時候按下任意鍵就會出現如同第四章圖3.2的選單畫面,仔細看選單底下的說明, 按下『e』就能夠進入grub的編輯模式了。此時你看到的畫面有點像底下這樣:

root (hd0,0)
kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.18-128.el5.img

此時,請將游標移動到kernel那一行,再按一次『 e 』進入kernel該行的編輯畫面中, 然後在出現的畫面當中,最後方輸入 single :

kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/ rhgb quietsingle

再按下『 Enter 』確定之後,按下 b 就可以開機進入單人維護模式了! 在這個模式底下,你會在tty1的地方不需要輸入密碼即可取得終端機的控制權(而且是使用root的身份喔!)。 之後就能夠修改root的密碼了!請使用底下的指令來修改root的密碼喔!

[root@www ~]#passwd# 接下來系統會要求你輸入兩次新的密碼,然後再來reboot即可順利修訂root密碼了!

這裡僅是介紹一個簡單的處理方法而已,更多的原理與說明將會在後續的各相關章節介紹的喔!


TAG:

 

评分:0

我来说两句

日历

« 2024-05-16  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 40042
  • 日志数: 47
  • 建立时间: 2010-01-07
  • 更新时间: 2010-10-11

RSS订阅

Open Toolbar