过去

过去

halt和命令之间有什么区别shutdown

答案1

一般来说,人们使用shutdown命令。它允许在关闭或重新启动之前出现时间延迟和警告消息,这对于多用户 shell 服务器的系统管理非常重要;它可以向用户提供停机时间的提前通知。

因此,必须像这样使用 shutdown 命令来立即停止/关闭计算机(至少在 Linux 和 FreeBSD 上):

shutdown -h now

或者通过自定义的 30 分钟提前警告重新启动它:

shutdown -r +30 "Planned software upgrades"

延迟后,shutdown告诉init更改为运行级别 0(停止)或 6(重新启动)。 (请注意,省略-h-r将导致系统进入单用户模式(运行级别 1),这会杀死大多数系统进程,但实际上不会停止系统;它仍然允许管理员保持以 root 身份登录。)

一旦系统进程被终止并且文件系统被卸载,系统将自动停止/关闭或重新启动。这是使用以下方法完成的haltreboot命令,它将更改同步到磁盘,然后执行实际的暂停/断电或重新启动。

在 Linux 上,如果haltreboot在系统尚未启动关闭过程时运行,它将shutdown自动调用该命令,而不是直接执行其预期操作。然而,在 FreeBSD 等系统上,这些命令首先将操作记录在wtmp然后将立即地自行执行暂停/重新启动,无需首先终止进程或卸载文件系统。

答案2

过去

在 20 世纪 80 年代,BSD 有haltreboot、 和shutdown。 System 5 UNIX 有一个 BSD 兼容性工具集。但它本身就有自己不同的shutdown命令。并且没有haltreboot根本没有。 (某些 System 5 变体具有 SCO XENIX 之类的东西haltsys。)

BSDhaltreboot命令是低级的、激烈的和直接的。这周到关闭 BSD 系统的方法是shutdown命令,它执行人们期望发生的所有事情:wall向用户发送消息、优雅地终止服务、写入日志条目、禁用登录等等。

虽然 BSD 很大程度上是公认的智慧的起源,即“ shutdownexecs halt/ reboot”,并且后者要小心使用;在 System 5 世界中,人们学到了相反的习惯,即halt/reboot只是方便的简写,仅此而已:/usr/ucb/halt从“BSD 兼容性包”中,与 没有什么不同shutdown -h。他们最终都做了init 0

进一步阅读

今天

如今,我们拥有一系列可能的系统管理工具集。 BSD 仍然拥有他们的工具集,尽管在 20 世纪 90 年代清除了任何可能的 AT&Tism。 Miquel van Smoorenburg 在 1992 年(重新)编写了 Linux init+rc及其相关工具,人们现在将其称为“System 5 init”,尽管它实际上并不是来自 UNIX System 5 的软件(并且不仅仅是init)。还有系统,暴发户, 和开胃菜,其中每一个都有他们自己的实现haltrebootfasthaltfastboot等等。

工具集也不断发展和变化。现在有一个poweroff命令,在 20 世纪 80 年代的操作系统中不存在,因为大多数现代机器上的中央处理器无法控制其电源。 Linux 工具集尤其获得了 BSD 命令;但与 UNIX System 5 上的 BSD 兼容性工具一样,它们的工作原理并不完全相同,而且大部分内容都已扁平化。

halt这种扁平化已经把我们带到了这样的地步shutdown大多相同。但具体细节因工具集而异,并且每个工具集的机制都略有不同。

它还使我们陷入了一个有点尴尬的境地,这个命令集已经变得如此充满兼容性选项,以至于它现在允许人们向计算机发出自相矛盾的指令,如reboot --haltpoweroff --reboot,正如我在 nosh 的手册页中指出的那样haltfasthalt, reboot, fastboot,和poweroff命令。 ☺

系统工具集

haltrebootpoweroff、 、telinitshutdown全部一个程序。它实际上是systemd自己的systemctl程序。它有几个命令行解析器,用于这些命令的各种命令行语法,以及它自己的语法,但之后主要在内部汇集到一个代码路径中。使用halt及其命令选项来触发操作与使用shutdown及其命令选项来触发相同的操作之间没有区别。

systemd 不考虑救援模式(这是 systemd 人们重新命名的单用户模式)成为关闭系统状态,并且使用这些命令中的任何一个都无法达到该状态。无选项shutdown now与 相同poweroff

进一步阅读:

BSD

BSD 在很大程度上保留了 20 世纪 80 年代的语义。 halt因此shutdown非常不是他们的工具集中的等效项。 haltreboot是一个单独的程序;而且仍然是低水平的、直接的和激烈的。而shutdownpoweroff,也是一个单独的程序,可以执行所有周到的事情,例如计划关闭、写入wall消息、记录操作、禁用登录等等。

在 BSD 工具集中,shutdown/poweroff传统上最终会调用halt/reboot来执行最终的系统状态更改。人们普遍认为“ shutdownexecs halt/ reboot”实际上在 NetBSD 和 OpenBSD 上仍然有效(现在通常是错误的)。但在 FreeBSD/TrueOS/DragonFlyBSD 上,只有-o使用该选项才会出现这种情况。在这些 BSD 上,两个都这些程序的通常情况下通过向进程 #1 发送各种信号( 、 和 )来 INT实现USR1最终的系统状态更改。做USR2init全部这些系统上的系统状态管理。

在所有这些中,无选项shutdown now并不等同于haltreboot或中的任何一个poweroff。它过渡到 BSD单用户模式,从中可以过渡后退多用户模式

进一步阅读:

小吃工具集

在 nosh 系统管理工具集中,haltfasthaltpowerofffastpoweroff、 、rebootfastboot都是一个程序。它是一个向后兼容的垫片,通常简单地链接shutdown对面的公认的智慧。该--force选项使其链接到system-control相反。

因此,此工具集中的命令和命令(具有等效选项)之间没有区别(不存在--force) ,因为这组“BSD/System 5 兼容性”命令只是.haltshutdownshutdown

进一步阅读:

新贵工具集

与 nosh 一样,在新兴的系统管理工具集中,与 BSD 智慧相反的情况也适用。 haltreboot、 和poweroff都是一个程序,通常链接到shutdown;除非--force使用该选项,这使得它reboot()自行进行系统调用。

因此,再次强调,在此工具集中,命令 和 and命令(具有等效选项)之间没有区别(不存在--force) 。同样,无选项( 、、或都不能最终调用,因为它们都设置了选项)使系统进入haltshutdownshutdown nowhaltrebootpoweroff单用户模式而不是将其关闭。

进一步阅读:

Linux 系统 5+init工具rc

同样,在此工具集中,与所接受的 BSD 智慧相反的应用是 和 ,halt并且reboot简单地链接到shutdown— 除非系统已经处于断电或停止“运行级别”的状态,在这种情况下,这些命令实际上会执行最终的系统状态更改。 shutdown反过来又链接到init.

所以,再说一次,没有什么区别(除非系统是已经很大程度上关闭)之间haltshutdown因为前者只是调用后者。是的,再次,无选项shutdown now( 、haltrebootpoweroff都不能最终调用,因为它们都设置了选项)使系统进入单用户模式而不是将其关闭。

答案3

我怀疑这在某种程度上取决于您使用的 UNIX/Linux 版本。在 Centos(我希望其他现代 Linux)上,halt 调用 shutdown(前提是你不在运行级别0 或 6) 这样你的系统就会干净地关闭。在 Solaris 10 上,暂停更加残酷,它只是刷新磁盘缓存并关闭系统电源 - 不会尝试运行任何脚本或关闭单模函数设施。

答案4

对于使用 AWS EC2 的用户:在 AWS 上shutdown 停止一个例子,当halt 终止它。

相关内容