阅读“停止和关闭命令之间有什么区别?” ,我通常对使用或不使用-h / -r选项的命令关闭功能有什么了解。
“停止”命令将关闭系统电源,使其进入系统的运行级别0。
“关闭”命令无需执行-h或-r命令即可关闭系统电源,以运行级别1。
命令“ poweroff”进入运行级别0或1怎么办?这是这三个命令之间的唯一主要区别吗?
阅读“停止和关闭命令之间有什么区别?” ,我通常对使用或不使用-h / -r选项的命令关闭功能有什么了解。
“停止”命令将关闭系统电源,使其进入系统的运行级别0。
“关闭”命令无需执行-h或-r命令即可关闭系统电源,以运行级别1。
命令“ poweroff”进入运行级别0或1怎么办?这是这三个命令之间的唯一主要区别吗?
Answers:
根据问题上的标签,您正在使用Red Hat Enterprise Linux。从版本7开始,就使用了systemd。对于systemd的世界,没有其他答案是正确的。您的问题中甚至没有一些假设。
halt
从van Smoorenburg“ System 5” init
实用程序发出命令的命令之一。 /sbin/halt
符号链接的语句/sbin/reboot
; systemd并非如此。根本没有单独的reboot
程序。 halt
或reboot
调用shutdown
与命令行参数程序; 对于systemd,它们也不正确。根本没有单独的shutdown
程序。每个系统管理工具集都有这些实用程序的版本。systemd,暴发户,nosh,van Smoorenburginit
和BSD init
都有自己的halt
,poweroff
等等。在每个方面,他们的机制略有不同。他们的手册页也是如此。
在systemd工具集halt
,poweroff
,reboot
,telinit
,和shutdown
是所有的符号链接/bin/systemctl
。他们都向后兼容性垫片,这仅仅是用于调用systemd的主要命令行界面速记:systemctl
。它们都映射到(实际上是)相同的单个程序。(根据约定,shell会告诉它调用它的名称。)
这些命令大多数是用于告诉systemd使用systemctl
来隔离特定目标的简写。隔离在systemctl
手册页(qv)中进行了说明,但出于此答案的目的,可以将其视为启动目标并停止其他目标。systemd.special
(8)手册页上列出了systemd中使用的标准目标。
bootup
systemd工具集中(7)手册页上的图表,尤其是最后一个,显示了此处涉及的三个“最终”目标:
halt.target
—一旦系统达到完全隔离此目标的状态,它将调用reboot(RB_HALT_SYSTEM)
系统调用。内核将尝试进入ROM监视程序,或者只是停止CPU(使用适当的任何机制)。reboot.target
—一旦系统达到完全隔离此目标的状态,它将调用reboot(RB_AUTOBOOT)
系统调用(或与magic命令行等效的调用)。内核将尝试触发重启。poweroff.target
—一旦系统达到完全隔离此目标的状态,它将调用reboot(RB_POWER_OFF)
系统调用。如果可能,内核将尝试从系统中关闭电源。这些是您在最终系统状态(而不是运行级别)中应该考虑的事情。从图中注意到,系统化的目标系统本身对其他系统中隐式而不是显式的事物进行编码:例如这些最终目标中的每个目标都包含shutdown.target
目标的概念,因此必须描述必须在停止之前停止的服务让他们有冲突的shutdown.target
目标。
systemctl
systemd-logind
当主叫用户不是超级用户时,尝试将请求发送到。它还会将延迟的关闭时间传递到systemd-shutdownd
。还有一些速记会触发wall
通知。除了这些复杂性之外,假设您当前是超级用户并且不请求计划的操作,那么此答案将使答案延长几倍。
systemctl isolate halt.target
简写为:
shutdown -H now
systemctl halt
halt
systemctl isolate reboot.target
简写为:
shutdown -r now
telinit 6
systemctl reboot
reboot
systemctl isolate poweroff.target
简写为:
shutdown -P now
telinit 0
shutdown now
systemctl poweroff
poweroff
systemctl isolate rescue.target
简写为:
telinit 1
systemctl rescue
systemctl isolate multi-user.target
简写为:
telinit 2
telinit 3
telinit 4
systemctl isolate graphical.target
简写为:
telinit 5
在解析了各种不同的命令行语法之后,这些最终都最终以systemctl
程序内部的相同代码路径结尾。
笔记:
shutdown now
切换到单用户模式。systemd并非如此。 rescue.target
- 在systemd中将单用户模式重命名为救援模式 -该shutdown
命令无法访问。telinit
确实完全忽略了手册页描述的文件系统中的所有那些链接和符号链接。表中将上述映射硬连线到程序中。runlevelN.target
default.target
systemctl
--force
选项的halt
,reboot
和poweroff
命令是一样的话说--force --force
到systemctl halt
,systemctl reboot
和systemctl poweroff
命令。这使得systemctl
尝试reboot()
直接呼叫。通常,它只是试图隔离目标。telinit
与init
。它们是系统世界中的不同程序,后者是该systemd
程序的另一个名称,而不是该systemctl
程序的名称。该systemd
程序不一定完全具有任何van Smoorenburg兼容性,并且在某些系统化的操作系统上抱怨如果尝试一次,将导致错误地调用该程序。init N
systemctl
。系统手册页。freedesktop.org。systemd.special
。系统手册页。freedesktop.org。bootup
。系统手册页。freedesktop.org。init
。nosh指南。软件。systemctl reboot
应该等于systemctl start reboot.target --job-mode=replace-irreversible
。使用任何其他作业模式都不太可靠。 unix.stackexchange.com/questions/381739/…–
systemctl reboot
“安全”重启方式,例如init 6
,否则我们将安全重启吗?
halt
指示硬件停止所有CPU功能,但将其保持在开机状态。这通常意味着有人必须随后通过按电源按钮来手动重新引导或关闭计算机。实现此目标的特定方法是特定于体系结构的,但是例如x86指令集提供了HLT
可暂停中央处理单元(CPU)直到发出下一个外部中断的指令。
poweroff
,例如halt
,停止CPU,但还会发送ACPI硬件信号,该信号将指示系统以立即彻底关闭启动。这大致相当于按下典型台式计算机上的电源按钮。
两个halt
和poweroff
通常的符号链接到reboot
可执行文件,这通常将调用shutdown
使用适当的参数(工具-h
,-P
或r
取决于是否)halt
,poweroff
或reboot
用于调用该工具。但是,将--force
选项传递给时reboot
,或者处于运行级别0或6时,reboot
将reboot()
使用适当的命令代码本身调用系统调用。
/sbin/init 0
或切换到运行级别0 /sbin/telinit 0
应该与停止系统相同,尽管采取的具体步骤将取决于相关的init系统,例如System-V init,upstart或systemd。如果您正在运行RHEL,则将使用systemd。
halt
,poweroff
并且shutdown -h
完全等效。实际上,暂停和关闭电源仅能执行call shutdown -h
。从暂停/关机手册页:
如果在系统不在运行级别0或6时调用暂停或重新启动,换句话说,在系统正常运行时,将调用shutdown(使用-h或-r标志)。有关更多信息,请参见shutdown(8)联机帮助页。
然后关机,通过切换到运行级别0,继续关闭系统。
停止和关机(以及重新启动)扮演双重角色;当在关闭过程中(即,运行级别0或6)执行时,它们将执行物理停止,关闭电源或重新引导计算机所需的低级操作,如另一个答案所述。