最核心、最推荐的命令
systemd 是目前绝大多数现代 Linux 发行版(如 Ubuntu 16.04+, CentOS 7+, Debian 8+, Fedora, Arch Linux 等)的默认系统管理器,推荐使用 systemctl 命令。

systemctl poweroff
这是在 systemd 系统上最推荐的关机命令。
- 作用:它会给所有正在运行的程序发送一个
SIGTERM信号,请求它们优雅地退出,然后等待一段时间后,再发送一个SIGKILL信号强制终止剩余进程,系统会安全地卸载所有文件系统并切断电源。 - 优点:这是最符合
systemd设计理念的方式,能确保关机过程最安全、最可控。 - 示例:
sudo systemctl poweroff
通常需要
sudo权限,因为关机是一个需要管理员权限的操作。
传统且通用的命令
这些命令在几乎所有 Linux/Unix 系统上都可用,包括那些不使用 systemd 的旧系统。
shutdown
这是一个非常强大和灵活的传统命令,特别适合计划内的关机。

- 作用:它会通知所有已登录的用户系统即将关闭,然后按照指定的时间执行关机或重启操作,这给了用户保存工作并退出的时间。
- 常用选项:
- 立即关机:
sudo shutdown -h now
-h:halt(停机),即关机。now:立即执行。
- 定时关机(10分钟后关机):
sudo shutdown +10
系统会显示 "The system is going down for poweroff at HH:MM" 之类的消息。
- 定时关机并指定消息(5分钟后关机,并通知大家“系统维护”):
sudo shutdown +5 "系统维护,请保存工作并退出"
- 取消一个已计划的关机:
sudo shutdown -c
- 立即关机:
- 优点:非常安全,因为它会提前通知用户,防止他们丢失未保存的工作。
halt
这个命令的作用是“停止”系统,但不一定切断电源。
- 作用:停止所有 CPU 活动,停止内存写入,然后停止系统,在支持 ACPI 的现代系统上,
halt通常等同于关机并断电,但在一些非常老的系统上,它可能只会停在 "System halted" 界面,需要手动按电源键。 - 示例:
sudo halt
- 注意:在现代 Linux 系统上,
halt命令通常会被systemd重定向到poweroff的行为,即最终会断电。
poweroff
这个命令的意图非常明确:关闭系统并切断电源。
- 作用:与
halt类似,但明确表示要执行关机操作,在systemd出现之前,它和halt的细微差别在于是否强制切断电源。 - 示例:
sudo poweroff
- 注意:在
systemd系统中,poweroff命令通常也会被systemctl poweroff所替代或调用。
其他相关命令
init
这是一个非常古老的命令,用于切换系统的运行级别(Runlevel)。
- 作用:通过切换到运行级别 0(halt)或 6(reboot)来关机或重启。
- 示例:
sudo init 0
- 注意:这个命令在现代
systemd系统上已被弃用,虽然它可能仍然可以工作,但你应该使用systemctl,它主要存在于为了兼容旧脚本而保留的功能中。
总结与对比
| 命令 | 推荐度 | 主要用途 | 备注 |
|---|---|---|---|
systemctl poweroff |
⭐⭐⭐⭐⭐ | 现代 Linux 系统的首选 | 最符合 systemd 设计,安全可靠。 |
shutdown -h now |
⭐⭐⭐⭐ | 传统且非常安全 | 特别适合计划关机,会提前通知用户。 |
sudo poweroff |
⭐⭐⭐ | 简单直接的关机 | 在大多数系统上有效,但 systemctl 更现代。 |
sudo halt |
⭐⭐ | 停止系统 | 在现代系统上行为通常等同于 poweroff。 |
sudo init 0 |
⭐ | 已弃用 | 仅用于兼容旧系统,不推荐在新系统上使用。 |
特殊情况:无法正常关机怎么办?
如果系统卡住,无法通过上述命令正常关机,你可以采取以下措施(按顺序尝试,谨慎使用):
-
强制重启(万能钥匙): 这是最后的选择,相当于 Windows 的“重启”按钮,它会强制重启,可能导致未保存的数据丢失或文件系统损坏。
sudo systemctl reboot # 或者传统命令 sudo shutdown -r now
-
强制关机(终极手段): 这等同于直接按电源按钮长按 5 秒。这是最危险的操作,仅在系统完全无响应时使用。
- 通过命令模拟:
sudo systemctl --force reboot
- 通过按键:长按物理电源按钮约 5 秒,直到电脑断电并重启。
- 通过命令模拟:
最佳实践建议
- 对于日常使用:直接使用
sudo systemctl poweroff。 - 对于服务器或需要提前通知他人的场景:使用
shutdown命令,sudo shutdown +10 "The server will be shut down for maintenance in 10 minutes."。 - 永远避免:直接按电源键,除非系统已经完全死机。
