halt 是 Linux 系統關機指令之一,會依目前 runlevel 決定行為:若為 0 或 6 則直接關機/重啟,否則呼叫 shutdown -h。本文詳細說明所有參數、範例、與 shutdown/reboot/init 的差異比較,助您靈活掌握關機操作。
指令語法與權限
halt [-n] [-w] [-d] [-f] [-i] [-p]
- 權限:需 root(系統管理者)執行
- 核心邏輯:檢查 runlevel → 0/6 直接關機/重啟 → 其他呼叫
shutdown -h
參數詳細說明
| 參數 | 功能 | 適用場景 |
-n | 關機前不執行 sync(不將記憶體資料寫回硬碟) | fsck 修復根分區後,防止舊超級區塊覆蓋修復結果 |
-w | 不真正關機,僅在 /var/log/wtmp 寫入關機紀錄 | 測試腳本、偽裝關機紀錄 |
-d | 不寫入 /var/log/wtmp 紀錄(-n 隱含此意) | 不想留下關機紀錄 |
-f | 強制關機,不呼叫 shutdown,直接殺進程、sync、停止核心 | 系統掛死無法正常關機、緊急情況 |
-i | 關機前先停止所有網路介面 | 網路儲存/叢集環境、避免資料損毀 |
-p | 關機時順便執行 poweroff(切斷電源,預設行為) | 實體機關機、虛擬機關機並釋放資源 |
常用範例
# 正常關機並切斷電源(最常用)
halt -p
# 或直接
halt
# 關機但不留下 wtmp 紀錄
halt -d
# 強制關機(系統無回應時)
halt -f
# 僅寫入紀錄不關機(測試用)
halt -w
Linux 常用關機/重啟指令深度比較
| 指令 | 核心機制 | 特點 | 典型用法 |
shutdown | 送信號給 init 改變 runlevel | 安全、通知登入用戶、可排程、可取消 | shutdown -h now 立即關機
shutdown -r +10 10 分鐘後重啟
shutdown -c 取消排程 |
halt | 呼叫 shutdown -h 或直接停止核心 | 最簡單關機指令、參數控制細節行為 | halt -p 關機斷電
halt -f 強制關機 |
reboot | 類似 halt 但觸發重啟 | 參數與 halt 幾乎相同 | reboot 重啟
reboot -f 強制重啟 |
init 0/6 | 直接切換 runlevel 0(關機)/6(重啟) | 最底層、不通知用戶、立即生效 | init 0 關機
init 6 重啟 |
poweroff | systemd/sysvinit 關機並斷電 | 現代系統預設關機指令 | poweroff |
shutdown 關鍵參數補充
| 參數 | 說明 |
-t 秒數 | 切換 runlevel 前等待秒數 |
-r | 重啟而非關機 |
-k | 僅發送警告訊息,不真正關機 |
-h | 關機並斷電 |
-n | 不經 init 直接關機(不建議) |
-c | 取消目前關機排程 |
-f | 重啟時跳過 fsck |
-F | 重啟時強制 fsck |
-time | 設定關機時間(如 22:00、+10) |
進階:/etc/inittab 與 runlevel 關係
id:3:initdefault: → 預設進入 runlevel 3(多使用者文字模式)
l0:0:wait:/etc/rc.d/rc 0 → runlevel 0 執行關機腳本
l6:6:wait:/etc/rc.d/rc 6 → runlevel 6 執行重啟腳本
- 查看
/etc/inittab 可知各 runlevel 具體執行動作
最佳實務建議
- 日常管理:
shutdown -h now 或 poweroff(安全、通知用戶、正常結束服務)。
- 系統掛死:
halt -f 或 reboot -f(強制、可能造成檔案系統損壞,重啟後會自動 fsck)。
- 排程維護:
shutdown -h 23:00(指定時間)、shutdown -r +30 "系統維護"(延遲並廣播訊息)。
- 虛擬機/雲端:優先使用客體作業系統指令(
shutdown/poweroff),避免直接從宿主機硬關機(相當於拔電源)。