在过去的几十年里,我读过一些关于不同版本的 Unix(类)操作系统/Linux 上的halt
和shutdown
命令(以及等效项,例如运行级别和 systemctl 目标)的历史和实现的有趣线程,并且已经有大量的内容清楚地表明,目的、用例和实现halt
/shutdown
以及两者之间的关系已经并且仍然因发行版而异。
话虽如此,我有一个非常具体的问题:是否有任何当前/现代的实际用例(直接)使用halt
将操作系统关闭到无响应/不存在状态(即,甚至不是单用户 shell)并保持计算机系统本身开机的实现?
我这么问是因为我想象大多数现代硬件都会有一个用于关闭电源的软件机制,所以我无法想象在手动关闭/重新启动系统之前需要停止操作系统。 (如果我说“大多数”是错误的,或者如果在操作系统终止的情况下手动关闭/重新启动系统实际上有好处,请分享。)我还读到,停止可用于“执行维护” ' 在仍然通电的计算机系统上,但我还没有看到这一点的详细说明 - 在不通电的通电计算机系统上可以进行什么样的“维护”(并且这样做是有益的)是否有操作系统(或任何其他软件界面,如 BIOS)正在运行?
halt
作为参考,这些是我在vs讨论中读到的更有用的线程shutdown
,尽管它们没有真正讨论在halt
不关闭系统电源的情况下关闭操作系统的实现的现代用途:
答案1
在没有立即重新启动或关闭电源的情况下停止系统的用途确实很少。它的存在基本上是因为过去(现在仍然)存在无法以电子方式控制电源的系统,但需要管理员操作物理断电开关。
我能想象的唯一场景之一是,如果您有一个连续运行多年的系统,您需要对其进行某种维护,但不敢让其磁盘旋转,因为它们可能无法运行重新启动。停止系统将停止任何数据处理,并可能允许安全断开某些电缆,而磁盘可能会继续旋转。
很久以前,早在 Linux 内核 2.2/2.4 时代,有人注意到内核的防火墙实现(iptables
或其前身之一)即使在系统停止时也能继续工作。作为最小化防火墙系统攻击面的极端情况,这可能很有用:在用户空间停止的情况下,就没有简单的方法来篡改防火墙配置,否则攻击防火墙的方法也非常有限。不幸的是,由于现代内核很可能在停止系统时将处理器置于低功耗停止状态,因此这个技巧很可能不再起作用。