halt
和shutdown
命令有什么区别?#1 楼
通常,使用shutdown
命令。它允许在关机或重新引导之前有时间延迟和警告消息,这对于多用户外壳服务器的系统管理很重要; 因此,必须这样使用shutdown命令才能立即停止/关闭计算机(至少在Linux和FreeBSD上):
shutdown -h now
或者使用自定义的30分钟提前警告重新启动它:
shutdown -r +30 "Planned software upgrades"
延迟后,
shutdown
告诉init
更改为运行级别0(停止)或6(重新引导)。 (请注意,忽略-h
或-r
将导致系统进入单用户模式(运行级别1),这会杀死大多数系统进程,但实际上并未暂停系统;它仍然允许管理员以root用户身份登录。) br /> 一旦系统进程被杀死并且文件系统被卸载,系统将停止/关机或自动重新启动。这是使用
halt
或reboot
命令完成的,该命令将更改同步到磁盘,然后执行实际的暂停/关机或重新引导。在Linux上,如果
halt
或reboot
在系统尚未运行时运行启动关闭过程后,它将自动调用shutdown
命令,而不是直接执行其预期的操作。但是,在FreeBSD之类的系统上,这些命令首先将动作记录在wtmp
中,然后将立即自行执行暂停/重新引导,而无需先终止进程或卸载文件系统。#2 楼
过去在1980年代,BSD具有
halt
,reboot
和shutdown
。 System 5 UNIX具有BSD兼容性工具集。但是它本身具有自己的不同的shutdown
命令;并且根本没有halt
或reboot
。 (某些System 5变体具有SCO XENIX的haltsys
之类的东西。)关闭BSD系统的一种体贴方式是halt
命令,该命令完成了人们期望发生的所有事情:reboot
向用户发送的消息,服务被正常终止,日志条目被写入,登录禁用等。虽然BSD在很大程度上是人们所接受的知识的起源,但“ bqs是
shutdown
execs wall
/ shutdown
”,而后者应谨慎使用;在System 5世界中,人们学到了相反的习惯,即halt
/ reboot
只是方便的简写,仅此而已:“ BSD兼容性软件包”中的halt
与reboot
的作用没有什么不同。他们俩最终都做了/usr/ucb/halt
。进一步阅读
shutdown -h
。 1982-05-11。 4.2BSD手册。init 0
。 2005-06-03。 SCO OpenServer手册。AT&T(1990)。 UNIX系统5发行版4:BSD / XENIX兼容性指南。 Prentice Hall。
AT&T(1990)。 UNIX系统5发行版4:系统管理员指南。 Prentice Hall。
今天
如今,我们拥有一系列可能的系统管理工具集。尽管在1990年代清除了所有可能的AT&Tism,但BSD仍然拥有其工具集。 Miquel van Smoorenburg在1992年(重新)编写了Linux
halt
+ haltsys
及其相关工具,人们现在将其称为“ System 5 init”,即使它实际上不是UNIX System 5中的软件(并且不是)。只是init
)。还有systemd,upstart和nosh,它们每个都有自己的rc
,init
,halt
,reboot
等实现。工具集也不断发展和变化。现在存在一个
fasthalt
命令,该命令在1980年代的操作系统中不存在,因为大多数现代机器上的中央处理器无法控制其电源。尤其是Linux工具集已经获得了BSD命令。但是,就像UNIX System 5上的BSD兼容性工具一样,它们并不是完全一样的东西,并且已在很大程度上进行了扁平化。这种扁平化将我们带到了
fastboot
和poweroff
几乎相同的地步。但是确切的细节因工具集而异,并且每个工具集的机制都略有不同。 它也使我们进入了一个令人尴尬的位置,该命令集已被大量兼容选项所吸引,现在它使人们能够给计算机提供矛盾的指令,如
halt
和shutdown
,正如我在nosh reboot --halt
,poweroff --reboot
,halt
,fasthalt
和reboot
命令的手册页。 ☺系统化工具集
fastboot
,poweroff
,halt
,reboot
和poweroff
都是一个程序。它实际上是systemd自己的telinit
程序。它具有多个命令行解析器,用于这些命令的各种命令行语法以及它自己的语法,但是在此之后,很大程度上将其内部合并到一个代码路径中。使用shutdown
及其命令选项来触发操作与使用systemctl
及其命令选项来触发相同操作之间没有区别。systemd不考虑救援模式(这是系统人员已重命名的模式)单用户模式)设为关闭的系统状态,并且这些命令中的任何一个均无法达到该状态。无选项
halt
与shutdown
相同。进一步阅读:
https://unix.stackexchange.com/a/196014 / 5132。
BSDs
BSD在很大程度上保留了其1980年代的语义。因此,
shutdown now
和poweroff
的工具集非常不同。 halt
和shutdown
是一个单一程序;并且仍然处于低水平,即时和激烈的状态。而halt
和reboot
(也是一个程序)则执行所有体贴的事情,例如计划的关机,编写shutdown
消息,记录操作,禁用登录等。在BSD工具集中,
poweroff
/ wall
传统上,最终要调用shutdown
/ poweroff
来制定最终的系统状态更改。 (如今通常是错误的)得到的智慧是,“ halt
execs reboot
/ shutdown
”实际上仍然在NetBSD和OpenBSD上成立。但是在FreeBSD / TrueOS / DragonFlyBSD上,只有使用halt
选项时才是这种情况。在这些BSD上,这两个程序通常都会通过发送各种信号(reboot
,-o
和INT
)到进程#1来执行最终的系统状态更改。 USR1
在这些系统上执行所有系统状态管理。在所有这些选项上,无选项
USR2
不等于init
,shutdown now
或halt
中的任何一个。它会转换为BSD单用户模式,从中可以转换回多用户模式。进一步阅读:
reboot
。系统管理员手册。 NetBSD手册页。 2011-11-04。poweroff
,shutdown
。 OpenBSD手册页。 2016-09-03。reboot
。 FreeBSD手册页。 2016-09-21。halt
,shutdown
,reboot
,halt
。 FreeBSD手册页。 2017年3月19日。fastboot
。系统管理员手册。 DragonFlyBSD手册页。 2016-09-29。fasthalt
,shutdown
,reboot
,halt
。系统管理员手册。 DragonFlyBSD手册页。 2016-09-29。nosh工具集
在nosh系统管理工具集中,
fastboot
,fasthalt
,halt
,fasthalt
,poweroff
和fastpoweroff
都是一个程序。这是一个向后兼容的填充程序,通常只链接到reboot
,这与所接受的知识相反。 fastboot
选项使其链接到shutdown
。因此,此工具集中的
--force
命令和system-control
命令(具有等效选项)之间没有区别(缺少--force
),因为这组“ BSD” / System 5兼容性”命令只是halt
顶部的薄垫片层。进一步阅读:
Jonathan de Boyne Pollard(2018)。
shutdown
。 nosh工具集手册页。软件。乔纳森·德博因·波拉德(2018)。
shutdown
nosh工具集手册页。软件。暴发户工具集
像nosh一样,在暴发户系统管理工具集中,与收到的BSD智慧相反。
shutdown
,telinit, init, reboot, halt, haltsys, powercycle, poweroff, … fastboot, fasthalt, fastpowercycle, fastpoweroff, …
和halt
都是一个程序,通常链接到reboot
;除非使用了poweroff
选项,否则它将使shutdown
系统调用自身。因此,在此工具集中,
--force
命令和reboot()
命令(具有等效选项)之间也没有区别(缺少--force
)。同样,没有选项的halt
(shutdown
,shutdown now
或halt
都无法调用,因为它们都设置了选项)使系统进入了单用户模式,而不是将其关闭。进一步阅读:
Scott James Remnant。
reboot
(8)。 Ubuntu手册页。Scott James Remnant。
poweroff
(8),shutdown
(8),reboot
(8)。 Ubuntu手册页。Linux System 5
halt
+ poweroff
工具集再次,在此工具集中,与已收到的BSD智慧相反,
init
和rc
只是链接到halt
,除非系统已经处于关机或停止“运行级别”,在这种情况下,这些命令实际上会执行最终的系统状态更改。 reboot
依次链接到shutdown
。因此,再次,
shutdown
和init
之间没有区别(除非系统已经很大程度上关闭),因为前者只是调用后者。是的,同样,没有选项的halt
(shutdown
,shutdown now
或halt
都无法最终调用,因为它们都设置了选项)使系统进入了单用户模式,而不是将其关闭。评论
这就是为什么当80%的选民投票系统不起作用的原因
–ychaouche
18年4月1日在9:34
您说:“停止和重新启动是一个程序;并且仍然是低级,直接和激烈的程序”,似乎并非如此。我引用了DragonflyBSD的停止手册页,其中说:停止和重新启动实用程序将文件系统缓存刷新到磁盘,向所有正在运行的进程发送SIGTERM(然后是SIGKILL),并分别停止或重新启动系统。将记录该操作,包括在wtmp(5)文件中输入关闭记录。参见:dragonflybsd.org/cgi/web-man?command=halt§ion=ANY
–ychaouche
18年4月2日在12:12
现在,重新阅读答案,以获取已经明确给出的(两次以上)不在列表中的内容。 BSD的各种系统管理员手册中也详细说明了这一点。
– JdeBP
18年4月3日在6:39
什么列表@JdeBP?
–ychaouche
18年4月3日在10:45
#3 楼
我怀疑这在某种程度上取决于您使用的UNIX / Linux版本。在Centos(以及我期望使用其他现代Linux的操作系统)上,停止调用shutdown(前提是您不在运行级别0或6),因此您的系统将完全关闭。在Solaris 10上,停止更为残酷,它只是刷新磁盘缓存并关闭系统电源-不会尝试运行任何脚本或关闭smf设施。#4 楼
对于使用AWS EC2的用户:在shutdown
终止实例时,在AWS上halt
会停止实例。评论
stop和终止有什么区别?
–roaima
18年8月20日在13:54
那是完全不同的主题,不在这里,这就是为什么我没有提到它。但是您可以看看docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
–dveim
18年8月20日14:00
因此,在您的回答中,您说的是stop执行了所说的操作并停止了实例,而halt(或用您的替代术语,终止)则停止了实例并将其删除。
–roaima
18年8月20日在16:08
这似乎不正确,请参阅docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
– Anton Boritskiy
19年3月22日在10:15
默认情况下,当您从Amazon EBS支持的实例启动关机(使用诸如shutdown或poweroff之类的命令)时,该实例停止(请注意,halt不会发出poweroff命令,并且如果使用,实例也不会终止;相反,它将把CPU放入HLT,实例将保持运行状态。您可以使用实例的InstanceInitiatedShutdownBehavior属性更改此行为,以使其终止。您可以在实例运行或停止时更新此属性。
– Anton Boritskiy
19年3月22日在10:15
#5 楼
在Linux中,“ halt”和“ reboot”分别是shutdown命令的别名-shutdown -h
和shutdown -r
。密码关闭通常假定为-h。评论
从外壳程序别名的角度来看,它们不是别名,但是是的,暂停基本上只是调用shutdown -h,而重新启动则运行shutdown -r。请注意,如果通过-f(强制)选项来停止或重新引导,则不会调用shutdown。
– Mikel
2011-3-28在2:47
实际上,尽管仍然是错误的,但是在系统化操作系统上,Shadur的描述比Mikel的修正更接近于事实。没有“ A只叫B”。它们都是调用单个程序的替代方法,如unix.stackexchange.com/a/196014/5132所述。
– JdeBP
15年4月14日在7:08
@JdeBP回到我写这个systemd不到一年的时候,我什至从未听说过它。 :)
– Shadur
15年4月14日在9:06
@JdeBP我现在将它们等同于sendmail命令-与MTA一样,使用哪种初始化系统也实际上并不重要,因为它们都可以识别关闭和停止。
– Shadur
15年4月14日在9:08
实际上,这确实很重要。因为工具集之间存在细微的差异,甚至确实是细微的差异。具有讽刺意味的是,sendmail命令也是如此。就像sendmail命令一样,但是不像您想的那样。
– JdeBP
15年4月15日在22:19
评论
很好的解释!
–user13742
13年1月27日在17:31
……但是现在已经过时了。在systemd Linux操作系统上,这些命令“仅出于兼容性”而存在(用systemd doco的话来说)。没有相互调用的单独的停止,重新引导和关闭程序。这里只有一个程序,有很多命令行解析器,它们在内部汇入一个代码路径。也没有运行级别。关机也不会进入单用户模式。实际上,单用户模式本身已被重命名。有关详细信息,请参见unix.stackexchange.com/a/196014/5132。
– JdeBP
2015年4月14日在7:18
如果我现在仅使用关机,它相当于telinit 1吗?你确定吗?我已经在debian上对其进行了测试,但是它将停止。
–阿米尔·雷扎·里亚希(Amir reza Riahi)
20年7月17日在21:20