haltshutdown命令有什么区别?

#1 楼

通常,使用shutdown命令。它允许在关机或重新引导之前有时间延迟和警告消息,这对于多用户外壳服务器的系统管理很重要;

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

shutdown -h now


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

shutdown -r +30 "Planned software upgrades"


延迟后, shutdown告诉init更改为运行级别0(停止)或6(重新引导)。 (请注意,忽略-h-r将导致系统进入单用户模式(运行级别1),这会杀死大多数系统进程,但实际上并未暂停系统;它仍然允许管理员以root用户身份登录。) br />
一旦系统进程被杀死并且文件系统被卸载,系统将停止/关机或自动重新启动。这是使用haltreboot命令完成的,该命令将更改同步到磁盘,然后执行实际的暂停/关机或重新引导。

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

评论


很好的解释!

–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

#2 楼

过去

在1980年代,BSD具有haltrebootshutdown。 System 5 UNIX具有BSD兼容性工具集。但是它本身具有自己的不同的shutdown命令;并且根本没有haltreboot。 (某些System 5变体具有SCO XENIX的haltsys之类的东西。)关闭BSD系统的一种体贴方式是halt命令,该命令完成了人们期望发生的所有事情:reboot向用户发送的消息,服务被正常终止,日志条目被写入,登录禁用等。

虽然BSD在很大程度上是人们所接受的知识的起源,但“ bqs是shutdown execs wall / shutdown”,而后者应谨慎使用;在System 5世界中,人们学到了相反的习惯,即halt / reboot只是方便的简写,仅此而已:“ BSD兼容性软件包”中的haltreboot的作用没有什么不同。他们俩最终都做了/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,它们每个都有自己的rcinithaltreboot等实现。

工具集也不断发展和变化。现在存在一个fasthalt命令,该命令在1980年代的操作系统中不存在,因为大多数现代机器上的中央处理器无法控制其电源。尤其是Linux工具集已经获得了BSD命令。但是,就像UNIX System 5上的BSD兼容性工具一样,它们并不是完全一样的东西,并且已在很大程度上进行了扁平化。

这种扁平化将我们带到了fastbootpoweroff几乎相同的地步。但是确切的细节因工具集而异,并且每个工具集的机制都略有不同。

它也使我们进入了一个令人尴尬的位置,该命令集已被大量兼容选项所吸引,现在它使人们能够给计算机提供矛盾的指令,如haltshutdown,正如我在nosh reboot --haltpoweroff --reboothaltfasthaltreboot命令的手册页。 ☺

系统化工具集

fastbootpoweroffhaltrebootpoweroff都是一个程序。它实际上是systemd自己的telinit程序。它具有多个命令行解析器,用于这些命令的各种命令行语法以及它自己的语法,但是在此之后,很大程度上将其内部合并到一个代码路径中。使用shutdown及其命令选项来触发操作与使用systemctl及其命令选项来触发相同操作之间没有区别。

systemd不考虑救援模式(这是系统人员已重命名的模式)单用户模式)设为关闭的系统状态,并且这些命令中的任何一个均无法达到该状态。无选项haltshutdown相同。

进一步阅读:



https://unix.stackexchange.com/a/196014 / 5132。

BSDs

BSD在很大程度上保留了其1980年代的语义。因此,shutdown nowpoweroff的工具集非常不同。 haltshutdown是一个单一程序;并且仍然处于低水平,即时和激烈的状态。而haltreboot(也是一个程序)则执行所有体贴的事情,例如计划的关机,编写shutdown消息,记录操作,禁用登录等。

在BSD工具集中,poweroff / wall传统上,最终要调用shutdown / poweroff来制定最终的系统状态更改。 (如今通常是错误的)得到的智慧是,“ halt execs reboot / shutdown”实际上仍然在NetBSD和OpenBSD上成立。但是在FreeBSD / TrueOS / DragonFlyBSD上,只有使用halt选项时才是这种情况。在这些BSD上,这两个程序通常都会通过发送各种信号(reboot-oINT)到进程#1来执行最终的系统状态更改。 USR1在这些系统上执行所有系统状态管理。

在所有这些选项上,无选项USR2不等于initshutdown nowhalt中的任何一个。它会转换为BSD单用户模式,从中可以转换回多用户模式。

进一步阅读:




reboot。系统管理员手册。 NetBSD手册页。 2011-11-04。

poweroffshutdown。 OpenBSD手册页。 2016-09-03。

reboot。 FreeBSD手册页。 2016-09-21。

haltshutdownreboothalt。 FreeBSD手册页。 2017年3月19日。

fastboot。系统管理员手册。 DragonFlyBSD手册页。 2016-09-29。

fasthaltshutdownreboothalt。系统管理员手册。 DragonFlyBSD手册页。 2016-09-29。

nosh工具集

在nosh系统管理工具集中,fastbootfasthalthaltfasthaltpowerofffastpoweroff都是一个程序。这是一个向后兼容的填充程序,通常只链接到reboot,这与所接受的知识相反。 fastboot选项使其链接到shutdown

因此,此工具集中的--force命令和system-control命令(具有等效选项)之间没有区别(缺少--force),因为这组“ BSD” / System 5兼容性”命令只是halt顶部的薄垫片层。

进一步阅读:


Jonathan de Boyne Pollard(2018)。 shutdown。 nosh工具集手册页。软件。
乔纳森·德博因·波拉德(2018)。 shutdown nosh工具集手册页。软件。

暴发户工具集

像nosh一样,在暴发户系统管理工具集中,与收到的BSD智慧相反。 shutdowntelinit, init, reboot, halt, haltsys, powercycle, poweroff, … fastboot, fasthalt, fastpowercycle, fastpoweroff, …halt都是一个程序,通常链接到reboot;除非使用了poweroff选项,否则它将使shutdown系统调用自身。

因此,在此工具集中,--force命令和reboot()命令(具有等效选项)之间也没有区别(缺少--force)。同样,没有选项的haltshutdownshutdown nowhalt都无法调用,因为它们都设置了选项)使系统进入了单用户模式,而不是将其关闭。

进一步阅读:


Scott James Remnant。 reboot(8)。 Ubuntu手册页。
Scott James Remnant。 poweroff(8),shutdown(8),reboot(8)。 Ubuntu手册页。

Linux System 5 halt + poweroff工具集

再次,在此工具集中,与已收到的BSD智慧相反,initrc只是链接到halt,除非系统已经处于关机或停止“运行级别”,在这种情况下,这些命令实际上会执行最终的系统状态更改。 reboot依次链接到shutdown

因此,再次,shutdowninit之间没有区别(除非系统已经很大程度上关闭),因为前者只是调用后者。是的,同样,没有选项的haltshutdownshutdown nowhalt都无法最终调用,因为它们都设置了选项)使系统进入了单用户模式,而不是将其关闭。

评论


这就是为什么当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 -hshutdown -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