需要重新启动系统吗?本指南将向您展示如何通过命令行安全可靠地重启或关闭 Linux 或 macOS 计算机。
系统即将停止
有时候,您可能需要重启系统或者完全关机。如果您使用的是无图形用户界面的服务器,或者您正在通过 SSH 连接远程计算机,那么命令行是您唯一的选择。Linux 和类 Unix 系统,如 macOS,提供了几个命令,可以直接通过命令行实现系统关闭或重启。
以下是一些常用的命令:
- shutdown
- reboot
- halt
- poweroff
查阅这些命令的手册页可能会让人感到困惑。根据您选择的命令行选项,所有这些命令都可以实现系统停止、重启和关机。实际上,reboot、halt 和 poweroff 的手册页包含完全相同的信息。
幕后机制
这要归功于 systemd 引导程序 系统,它取代了较早的 System V init 系统。在 Linux 世界中,Fedora 最早在 2011 年开始使用 systemd。此后,它被许多发行版所采用。 Debian 和 Ubuntu 在 2015 年也切换到了 systemd。
在基于 systemd 的发行版中,shutdown、reboot、halt 和 poweroff 命令实际上是指向 systemctl 命令的便捷快捷方式。保留这些命令是为了与基于 System V init 的发行版保持一定程度的兼容性。这意味着,如果将 shell 脚本(以及老牌的 System V 系统管理员)迁移到运行 systemd 发行版的计算机上,它们不会出现问题。
使用 shutdown 命令
关闭或重启多用户系统意味着需要提前规划。您需要决定何时关闭或重启系统,并警告其他系统用户即将发生的关机操作,以及何时进行关机。如果是您自己的计算机,且只有您一个人使用,情况会简单得多。
要运行这些命令中的任何一个,您必须在 sudo 组中,也就是说,您必须具有超级用户权限并能够使用 sudo 命令。 如果您发出的命令将立即生效,并且不会影响其他已登录的用户,则无需使用 sudo。 如果您尝试使用这些命令之一且被拒绝,请使用 sudo 重试。
默认情况下,shutdown 命令会确保所有进程完全停止,所有文件系统同步,并且所有 CPU 活动都已停止。 这就形成了 “停止” 状态。 然后,它会向硬件发送消息,切断电源。 这就是关机,或者 “关机” 状态。
通常会给 shutdown 命令传递一些参数,例如时间字符串和发送给已登录用户的警告消息。 让我们安排一个 15 分钟后关机的计划。 输入 `shutdown`、一个空格、`+15`、一个空格,然后输入要发送给用户的消息。
shutdown +15 Shutting down in 15 minutes!
我们使用的时间字符串是 `+15`,表示从现在开始的 15 分钟。 `+` 是可选的,可以直接输入 `15`。
您将收到确认关闭计划和何时发生的响应。 登录的用户也会收到您发送的消息。
要取消关闭,请使用 `-c`(取消)选项。
shutdown -c
虽然您不会收到关于您的关闭已被取消的通知,但您的登录用户会收到通知。
如果您不提供时间字符串,则系统会在一分钟后安排关闭。请注意,如果您不指定时间字符串,则无法向已登录用户发送消息。
shutdown
如果您连一分钟都等不了,可以使用 `now` 作为时间字符串,关闭操作将立即生效。`now` 等同于使用 `+0`。
时间字符串也可以是指定的时间,例如 `23:00`。它必须遵循 `HH:MM` 格式,并且必须使用 24 小时制。系统关闭前五分钟,将禁止新用户登录。
我们知道,shutdown 的默认操作是让计算机进入停止状态,然后再关机。可以通过给它传递其他命令行选项来覆盖此行为。
-H(停止)选项将使您的计算机进入停止状态,但不会要求硬件关闭电源。
-P (poweroff) 是默认操作。 计算机进入停止状态,然后关闭电源。
-r(重新启动)选项将使您的计算机进入暂停状态,然后重新启动它。
-h(停止和关机)选项与 -P 相同。如果同时使用 -h 和 -H,则 -H 选项优先。
-c(取消)选项将取消任何预定的关机、暂停或重新启动。
以下是我们安排重启的示例。
shutdown -r 08:20 System rebooting at 08:20
reboot、halt 和 poweroff 命令
这些命令执行其名称所暗示的操作。但是,它们中的每一个都可以接受命令行选项,以使它们中的任何一个执行重启、停止或关机。 但为什么要混淆呢?这些命令最好按照其表面含义使用。
如果要立即重启,请使用 `reboot`。 如果要立即关机,请使用 `poweroff`。如果要立即停止系统,请使用 `halt`。
reboot
halt
poweroff
这些命令会立即生效。 如果这些命令中的任何一个被拒绝,请在它们前面加上 `sudo`。但请注意,被拒绝的原因通常是因为有其他用户登录到您即将离线的系统中。
哪个命令适合我?
在多用户环境中,使用 `shutdown` 来执行这些操作可以为您提供更多控制权。在这些情况下,能够安排关闭和重启,并通过广播消息警告用户的功能非常有用。对于单用户计算机,`reboot` 和 `poweroff` 命令可能就足够了。