在日常使用 Linux 系統時,可能你只會下指令「關機」,但其實背後發生了許多步驟,也有各種不同的命令方式。今天我們就來聊聊常用的幾個關機命令,並以日常的角度來解釋它們如何運作,同時保持專業性,讓你了解內部的實際流程。
為什麼需要不同的關機命令?
你可能會發現有以下幾個常見指令:
- shutdown -h now
- systemctl poweroff
- poweroff 與 halt
- 還有一些其他方法(例如使用 init 0、telinit 0 或桌面環境的專用指令)
這些命令雖然最終目的都是讓系統停機或關閉,但它們的背景與運作方式卻有些微差異。就像生活中有時候你會用不同方式關燈——按開關、拔電源、或是利用智能家居App,每種方式都有其用途與細節。
命令大解密:用日常語言看內部運作
shutdown -h now:老牌的有序關機
想像你要結束一天的工作,準備關閉辦公室燈光。你不會直接拔掉插頭,而是先通知同事、保存所有資料,再有序離開。
- shutdown -h now 就像這個流程:系統會先發出通知,讓所有正在使用的程式與使用者有準備時間;接著,它會依序停止服務、同步磁碟(把資料寫入硬碟),最後再進入「停機」狀態。
- 在現代 Linux 系統(多數使用 systemd)中,這個命令其實是一個向後相容的方式,最終會交給 systemd 去執行整個關機流程。
systemctl poweroff:現代原生關機命令
如果你用智能家居App關燈,那直接點選關機鍵,整個流程就由 App 處理,方便又迅速。
- systemctl poweroff 就是針對 systemd 系統設計的原生關機命令。
- 它會直接指示 systemd:把所有服務停止、通知所有使用者,並且在最後一步送出一個 ACPI 信號 給硬體,讓電源真正切斷。
- 使用這個命令,你不用擔心資料沒有保存或服務沒正常關閉,因為它會自動按照正確順序處理所有工作。
poweroff 與 halt:關機的兩種古早說法
這兩個命令在古早時代有著不同的角色,就像傳統家裡的開關方式:
- poweroff:就像按下那個能讓所有電器完全斷電的總開關,送出 ACPI 信號,讓硬體完全關閉。
- halt:則主要是停止 CPU 運作,但有時候不會讓機箱真正斷電,可能還會看到機器的指示燈亮著。
- 現在在 systemd 系統裡,這兩個命令大多會指向同一套程序,所以使用效果通常很接近,但細節上仍有區別。
其他替代方式:init 0、telinit 0 以及桌面專用指令
還有一些較少見但仍有用的關機方式:
- init 0 或 telinit 0:這些命令是告訴系統「切換到停機狀態(Runlevel 0)」,適用於傳統的 SysVinit 系統;在某些系統上,它們最終也會交給 systemd 處理。
- 在桌面環境(例如 GNOME)下,你也可以使用專門的指令,例如
這樣可以讓你在不彈出提示的情況下,直接關閉桌面會話並關機。gnome-session-quit --power-off --force --no-prompt
ACPI 信號:與硬體直接對話
說到關機,我們一定不能不提 ACPI(Advanced Configuration and Power Interface)。這個詞聽起來很專業,但實際上它就是一套標準,讓作業系統可以跟硬體對話,尤其是在電源管理方面。
- 當你下達關機命令時,系統最後會送出 ACPI 信號。你可以把它想像成一個「關電源」的指令,告訴主板和電源供應器:「夠了,現在該切斷電源了!」
- 這個信號確保了硬體不再繼續供電,也就是讓整台電腦真正完全關閉。
小整理一下各個指令
命令 | 作用與流程 | 使用建議 |
---|---|---|
shutdown -h now | 發送通知、停止服務、同步磁碟,最後停機 | 舊有相容命令,流程完整 |
systemctl poweroff | 直接由 systemd 處理關機,依序停止服務並送出 ACPI 信號 | 推薦用於現代 systemd 系統 |
poweroff | 發送 ACPI 信號,要求完全斷電 | 與 systemctl poweroff 大同小異 |
halt | 停止 CPU 運作,但可能不斷電 | 使用時留意硬體狀態 |
init 0 / telinit 0 | 改變系統運行等級到 0,進入停機狀態 | 適用於傳統系統,現代則推薦 systemctl |
看到這裡可能有點亂了,最後來做一個小結論好了。簡單來說,在使用 systemd 的現代 Linux 發行版上:
systemctl poweroff = poweroff = shutdown -h now
另外需注意的是 halt 在歷史上僅是停止 CPU,但在某些系統中可能不會斷電;現代 systemd 會依設定將 halt 與 poweroff 做出區分,所以使用時要注意目的。