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 身份登录。)
一旦系统进程被终止并且文件系统被卸载,系统将自动停止/关闭或重新启动。这是使用以下方法完成的halt
或reboot
命令,它将更改同步到磁盘,然后执行实际的暂停/断电或重新启动。
在 Linux 上,如果halt
或reboot
在系统尚未启动关闭过程时运行,它将shutdown
自动调用该命令,而不是直接执行其预期操作。然而,在 FreeBSD 等系统上,这些命令首先将操作记录在wtmp
然后将立即地自行执行暂停/重新启动,无需首先终止进程或卸载文件系统。
答案2
过去
在 20 世纪 80 年代,BSD 有halt
、reboot
、 和shutdown
。 System 5 UNIX 有一个 BSD 兼容性工具集。但它本身就有自己不同的shutdown
命令。并且没有halt
或reboot
根本没有。 (某些 System 5 变体具有 SCO XENIX 之类的东西haltsys
。)
BSDhalt
和reboot
命令是低级的、激烈的和直接的。这周到关闭 BSD 系统的方法是shutdown
命令,它执行人们期望发生的所有事情:wall
向用户发送消息、优雅地终止服务、写入日志条目、禁用登录等等。
虽然 BSD 很大程度上是公认的智慧的起源,即“ shutdown
execs halt
/ reboot
”,并且后者要小心使用;在 System 5 世界中,人们学到了相反的习惯,即halt
/reboot
只是方便的简写,仅此而已:/usr/ucb/halt
从“BSD 兼容性包”中,与 没有什么不同shutdown -h
。他们最终都做了init 0
。
进一步阅读
halt
。 1982 年 5 月 11 日。 4.2BSD手册。haltsys
。 2005年6月3日。 SCO OpenServer 手册。- 美国电话电报公司 (1990)。 UNIX 系统 5 第 4 版:BSD/XENIX 兼容性指南。普伦蒂斯·霍尔。
- 美国电话电报公司 (1990)。 UNIX 系统 5 第 4 版:系统管理员指南。普伦蒂斯·霍尔。
今天
如今,我们拥有一系列可能的系统管理工具集。 BSD 仍然拥有他们的工具集,尽管在 20 世纪 90 年代清除了任何可能的 AT&Tism。 Miquel van Smoorenburg 在 1992 年(重新)编写了 Linux init
+rc
及其相关工具,人们现在将其称为“System 5 init”,尽管它实际上并不是来自 UNIX System 5 的软件(并且不仅仅是init
)。还有系统,暴发户, 和开胃菜,其中每一个都有他们自己的实现、halt
、reboot
、fasthalt
、fastboot
等等。
工具集也不断发展和变化。现在有一个poweroff
命令,在 20 世纪 80 年代的操作系统中不存在,因为大多数现代机器上的中央处理器无法控制其电源。 Linux 工具集尤其获得了 BSD 命令;但与 UNIX System 5 上的 BSD 兼容性工具一样,它们的工作原理并不完全相同,而且大部分内容都已扁平化。
halt
这种扁平化已经把我们带到了这样的地步shutdown
:大多相同。但具体细节因工具集而异,并且每个工具集的机制都略有不同。
它还使我们陷入了一个有点尴尬的境地,这个命令集已经变得如此充满兼容性选项,以至于它现在允许人们向计算机发出自相矛盾的指令,如reboot --halt
和poweroff --reboot
,正如我在 nosh 的手册页中指出的那样halt
,fasthalt
, reboot
, fastboot
,和poweroff
命令。 ☺
系统工具集
halt
、reboot
、poweroff
、 、telinit
和shutdown
是全部一个程序。它实际上是systemd自己的systemctl
程序。它有几个命令行解析器,用于这些命令的各种命令行语法,以及它自己的语法,但之后主要在内部汇集到一个代码路径中。使用halt
及其命令选项来触发操作与使用shutdown
及其命令选项来触发相同的操作之间没有区别。
systemd 不考虑救援模式(这是 systemd 人们重新命名的单用户模式)成为关闭系统状态,并且使用这些命令中的任何一个都无法达到该状态。无选项shutdown now
与 相同poweroff
。
进一步阅读:
BSD
BSD 在很大程度上保留了 20 世纪 80 年代的语义。 halt
因此shutdown
非常不是他们的工具集中的等效项。 halt
和reboot
是一个单独的程序;而且仍然是低水平的、直接的和激烈的。而shutdown
和poweroff
,也是一个单独的程序,可以执行所有周到的事情,例如计划关闭、写入wall
消息、记录操作、禁用登录等等。
在 BSD 工具集中,shutdown
/poweroff
传统上最终会调用halt
/reboot
来执行最终的系统状态更改。人们普遍认为“ shutdown
execs halt
/ reboot
”实际上在 NetBSD 和 OpenBSD 上仍然有效(现在通常是错误的)。但在 FreeBSD/TrueOS/DragonFlyBSD 上,只有-o
使用该选项才会出现这种情况。在这些 BSD 上,两个都这些程序的通常情况下通过向进程 #1 发送各种信号( 、 和 )来 INT
实现USR1
最终的系统状态更改。做USR2
init
全部这些系统上的系统状态管理。
在所有这些中,无选项shutdown now
并不等同于halt
、reboot
或中的任何一个poweroff
。它过渡到 BSD单用户模式,从中可以过渡后退到多用户模式。
进一步阅读:
shutdown
。 系统管理员手册。 NetBSD 手册页。 2011年11月4日。reboot
,halt
。 OpenBSD 手册页。 2016年9月3日。shutdown
。 FreeBSD 手册页。 2016年9月21日。reboot
,halt
,fastboot
,fasthalt
。 FreeBSD 手册页。 2017年3月19日。shutdown
。 系统管理员手册。 DragonFlyBSD 手册页。 2016年9月29日。reboot
,halt
,fastboot
,fasthalt
。 系统管理员手册。 DragonFlyBSD 手册页。 2016年9月29日。
小吃工具集
在 nosh 系统管理工具集中,halt
、fasthalt
、poweroff
、fastpoweroff
、 、reboot
和fastboot
都是一个程序。它是一个向后兼容的垫片,通常简单地链接shutdown
到对面的公认的智慧。该--force
选项使其链接到system-control
相反。
因此,此工具集中的命令和命令(具有等效选项)之间没有区别(不存在--force
) ,因为这组“BSD/System 5 兼容性”命令只是.halt
shutdown
shutdown
进一步阅读:
- 乔纳森·德博因·波拉德 (2018)。
shutdown
。 nosh 工具集手册页。软件。 - 乔纳森·德博因·波拉德 (2018)。
telinit, init, reboot, halt, haltsys, powercycle, poweroff, … fastboot, fasthalt, fastpowercycle, fastpoweroff, …
nosh 工具集手册页。软件。
新贵工具集
与 nosh 一样,在新兴的系统管理工具集中,与 BSD 智慧相反的情况也适用。 halt
、reboot
、 和poweroff
都是一个程序,通常链接到shutdown
;除非--force
使用该选项,这使得它reboot()
自行进行系统调用。
因此,再次强调,在此工具集中,命令 和 and命令(具有等效选项)之间没有区别(不存在--force
) 。同样,无选项( 、、或都不能最终调用,因为它们都设置了选项)使系统进入halt
shutdown
shutdown now
halt
reboot
poweroff
单用户模式而不是将其关闭。
进一步阅读:
- 斯科特·詹姆斯·雷南特。
shutdown
(8)。 Ubuntu 手册页。 - 斯科特·詹姆斯·雷南特。
reboot
(8),halt
(8),poweroff
(8)。 Ubuntu 手册页。
Linux 系统 5+init
工具rc
集
同样,在此工具集中,与所接受的 BSD 智慧相反的应用是 和 ,halt
并且reboot
简单地链接到shutdown
— 除非系统已经处于断电或停止“运行级别”的状态,在这种情况下,这些命令实际上会执行最终的系统状态更改。 shutdown
反过来又链接到init
.
所以,再说一次,没有什么区别(除非系统是已经很大程度上关闭)之间halt
和shutdown
因为前者只是调用后者。是的,再次,无选项shutdown now
( 、halt
、reboot
或poweroff
都不能最终调用,因为它们都设置了选项)使系统进入单用户模式而不是将其关闭。
答案3
答案4
对于使用 AWS EC2 的用户:在 AWS 上shutdown
停止一个例子,当halt
终止它。