小智 85
通常,使用shutdown命令. 它允许在关闭或重新启动之前的时间延迟和警告消息,这对于多用户 shell 服务器的系统管理很重要;它可以向用户提供停机时间的提前通知。
因此,必须像这样使用 shutdown 命令立即停止/关闭计算机(至少在 Linux 和 FreeBSD 上):
shutdown -h now
Run Code Online (Sandbox Code Playgroud)
或者使用自定义的 30 分钟提前警告重新启动它:
shutdown -r +30 "Planned software upgrades"
Run Code Online (Sandbox Code Playgroud)
延迟后,shutdown告诉init更改为运行级别 0(暂停)或 6(重新启动)。(请注意,省略-hor-r将导致系统进入单用户模式(运行级别 1),这会杀死大多数系统进程但实际上并不会停止系统;它仍然允许管理员以 root 身份保持登录状态。)
一旦系统进程被杀死并且文件系统被卸载,系统就会自动停止/关闭电源或重新启动。这是使用haltorreboot命令完成的,该命令将更改同步到磁盘,然后执行实际的暂停/关闭电源或重新启动。
在 Linux 上,如果halt或reboot在系统尚未启动关闭过程时运行,它将shutdown自动调用该命令,而不是直接执行其预期操作。但是,在诸如 FreeBSD 之类的系统上,这些命令首先登录操作wtmp,然后立即自行执行暂停/重新启动,而无需首先终止进程或卸载文件系统。
Jde*_*eBP 63
在20世纪80年代,BSD系统有halt,reboot和shutdown。System 5 UNIX 有一个 BSD 兼容性工具集。但它天生就有自己的、不同的shutdown命令;并且没有halt或根本没有reboot。(某些 System 5 变体具有 SCO XENIX 之类的东西haltsys。)
BSDhalt和reboot命令是低级的、激烈的和直接的。关闭 BSD 系统的体贴方式是shutdown命令,它完成了人们期望发生的所有事情:wall向用户发送消息、优雅地终止服务、写入日志条目、禁用登录等等。
虽然 BSD 主要是“ shutdownexecs halt/ reboot”所获得的智慧的起源,并且后者需要谨慎使用;在 System 5 世界中,人们养成了相反的习惯,即halt/reboot只是方便的速记,仅此而已:/usr/ucb/halt从“BSD 兼容包”中, 与shutdown -h. 他们最终都做了init 0。
halt. 1982-05-11。4.2BSD手册。haltsys. 2005-06-03。SCO OpenServer 手册。如今,我们拥有一系列可能的系统管理工具集。BSD 仍然有他们的工具集,尽管在 1990 年代清除了任何可能的 AT&Tism。Miquel van Smoorenburg 在 1992 年(重新)编写了一个 Linux init+rc及其相关工具,人们现在将其称为“System 5 init”,尽管它实际上并不是来自 UNIX System 5 的软件(并且不仅仅是init)。还有systemd、upstart和nosh,每个都有自己的halt、reboot、fasthalt、fastboot等实现。
工具集也得到了发展和改变。现在有一个poweroff命令,在 1980 年代的操作系统中不存在,因为大多数当代机器上的中央处理单元无法控制它们的电源。尤其是 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 在很大程度上保留了 1980 年代的语义。 halt并shutdown因此非常不以他们的工具集等价的。 halt并且reboot是一个单一的程序;并且仍然是低水平的、直接的和激烈的。而shutdownandpoweroff也是一个程序,可以完成所有考虑周到的事情,例如计划关闭、编写wall消息、记录操作、禁用登录等。
在 BSD 工具集中,shutdown/poweroff传统上最终会调用halt/reboot来制定最终的系统状态更改。“ shutdownexecs halt/ reboot”实际上仍然适用于NetBSD和OpenBSD (现在经常不正确)获得的智慧。但是在 FreeBSD/TrueOS/DragonFlyBSD 上,只有-o使用该选项时才会出现这种情况。这些BSD系统,既这些程序的正常颁布通过发送各种信号(最后的系统状态改变INT,USR1和USR2)来处理#1。 init确实都在这些系统上的系统状态管理。
在所有的人,选择少shutdown now不等同于任何的halt,reboot或poweroff。它转换到BSD单用户模式,从其中一个可转变回至多用户模式。
shutdown. 系统管理员手册。NetBSD 手册页。2011-11-04。reboot,halt . OpenBSD 手册页。2016-09-03。shutdown. FreeBSD 手册页。2016-09-21。reboot, halt, fastboot,fasthalt . FreeBSD 手册页。2017-03-19。shutdown. 系统管理员手册。DragonFlyBSD 手册页。2016-09-29。reboot, halt, fastboot,fasthalt . 系统管理员手册。DragonFlyBSD 手册页。2016-09-29。在 nosh 系统管理工具集中halt,fasthalt、poweroff、fastpoweroff、reboot、 和fastboot都是一个程序。这是一个向后兼容的垫片,通常简单地链接到shutdown,与接受的智慧相反。该--force选项使其链接到system-control。
因此,此工具集中--force的halt命令和shutdown命令(具有等效选项)之间没有区别(不存在),因为这组“BSD/System 5 兼容性”命令只是shutdown.
shutdown. nosh 工具集手册页。软件。telinit, init, reboot, halt, haltsys, powercycle, poweroff, … fastboot, fasthalt, fastpowercycle, fastpoweroff, … nosh 工具集手册页。软件。与 nosh 一样,在 upstart 系统管理工具集中,与收到的 BSD 智慧相反。 halt, reboot, 和poweroff都是一个程序,通常链接到shutdown; 除非使用该--force选项,这使得reboot()系统调用本身。
因此,在此工具集中--force,halt命令和shutdown命令(具有等效选项)之间没有区别(不存在)。同时再次,选项少shutdown now(其中没有halt,reboot或者poweroff可以结束了调用,因为他们所有的设置选项)使系统进入单用户模式,而不是将其关闭。
shutdown(8) . Ubuntu 手册页。reboot(8), halt(8), poweroff(8)。Ubuntu 手册页。init+rc工具集同样,在这个工具集中,与收到的 BSD 智慧相反,halt并且reboot简单地链接到shutdown- 除非系统已经处于断电或暂停“运行级别”,在这种情况下,这些命令实际上会执行最终的系统状态更改。 shutdown依次链接到init。
因此,再一次,两者之间没有区别(除非系统已经在很大程度上关闭)halt,shutdown因为前者只是调用后者。是的,再次,选择少shutdown now(其中没有halt,reboot或者poweroff可以结束了调用,因为他们所有的设置选项)使系统进入单用户模式,而不是将其关闭。