說明
很多朋友在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 這個工具的呼叫, 不過,多做幾次總是比較放心點.
shutdown
由於Linux的關機是那麼重要的工作,因此除了你是在主機前面以tty7圖形接口來登陸系統時, 不論用什麼身份都能夠關機之外,若你是使用遠程管理工具(如透過pietty使用ssh服務來從其他電腦登陸主機), 那關機就只有root有權力而已!
嗯!那就來關機試試看吧!我們較常使用的是shutdown這個指令,而這個指令會通知系統內的各個程式 (processes),並且會通知系統中的run-level內的一些服務來關閉。 shutdown可以達成如下的工作:
可以自由選擇關機模式:是要關機、重新啟動或進入單人操作模式均可; 可以配置關機時間: 可以配置成現在立刻關機, 也可以配置某一個特定的時間才關機。 可自訂關機資訊:在關機之前,可以將自己設定的資訊傳送給線上 user 。 可以只發出警告訊息:有時有可能你要進行一些測試,而不想讓其他的使用者乾擾, 或是明白的告訴使用者某段時間要注意一下!這時候可以用 shutdown 來嚇唬使用者,但卻不是真的要關機啦! 可以選擇是否要 fsck 檢查檔案系統 。
[root@www ~]# /sbin/shutdown [-t 秒] [-arkhncfF] 時間[警告訊息]
選項與參數:
-t sec : -t 後面加秒數,也即『過幾秒後關機’的意思
-k : 不要真的關機,只是發送警告訊息出去!
-r : 將系統的服務停掉之後就重新啟動(常用)
-h : 將系統的服務停用後,立即關機。 (常用)
-n : 不經過init 程序,直接以shutdown 的功能來關機
-f : 關機並啟動之後,強制略過fsck 的磁碟檢查
-F : 系統重新啟動之後,強制檢查進行 fsck 的磁碟檢查
-c : 取消已經在進行的shutdown 指令內容。
時間 : 這是一定要加入的參數!指定係統關機的時間!時間的範例底下會說明。
範例 -h 10 'I will shutdown after 10 mins'
# 告訴大家,這部機器會在十分鐘後關機!並且會顯示在目前登陸者的螢幕前方!
# 至於參數有哪些呢?以下介紹幾個吧!
立刻關機,其中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'
只發出警告信件的參數!系統並不會關機囉!嚇唬人!