为什么我们需要在不同的二进制文件中重新启动功能?


12

为什么我们需要在不同的二进制文件中重新启动功能?

shutdown -r

reboot

还是它们在某些方面有所不同?


1
有关区别,请参见unix.stackexchange.com/questions/8690/…-命令根据操作系统的不同而有所不同(但在Linux中通常执行相同的操作)。
PleaseStand

如下所述,并在unix.stackexchange.com/a/196014/5132中进行了详细说明,此问题的前提在系统化 Linux操作系统上是错误的。这些不是此类系统上的二进制文件。
JdeBP

Answers:


15

我们不一定都需要它们,但是由于Unix的历史以及版本的多样性,我们都需要它们。

从各自的手册页:

  • 关闭实用程序出现在4.0BSD中。
  • 重新启动实用程序出现在版本6 AT&T UNIX中。

关闭功能更通用,功能更强大,而重新启动则更友好,更容易记住。

shutdown使您可以指定一个时间参数(例如,在5分钟内重新启动),并允许您除了重新启动之外还做很多事情,包括:

  • 您可以启动用户而实际上不关闭
  • 您可以让系统进入睡眠状态而不是关闭
  • 您可以简单地关机而无需重新启动(如halt命令)
  • 您可以在系统上为用户添加自定义警告消息

但是,如果您只想立即重新引导系统,则键入reboot比起来容易shutdown -r now


1
有趣的事实:shutdown现在默认使用某些版本。shutdown -h永远不要试图获取帮助以寻求帮助,尤其是不要在数据中心内的服务器上。
Residuum 2011年

6

这两个命令的功能有所不同,但是它们最终可能会互相调用,这就是为什么它们似乎做同样的事情!

reboot将调用内核以实际触发硬件重启。但是,只有在系统准备关闭时才执行此操作-应该停止所有守护程序和用户进程,卸载文件系统等。因此,它将检查系统运行级别,如果它不是0或6,则它将实际调用shutdown给您的命令。

shutdown导致更改系统运行级别。运行级别更改(暂停为0或重新引导为6)在/etc/rc0.d或rc6.d中运行了许多脚本,这些脚本关闭了守护程序,卸载文件系统等。最后,这些脚本调用haltreboot-这次系统处于正确的运行级别,它们指示内核重新引导(或停止)。


6

除了iconoclast编写的内容之外,这两个程序之间还有一个重要的区别:shutdown在中/sbin,而reboot在中/usr/bin

你问为什么这很重要?我会告诉你。

/usr在系统启动足够远以至于系统无法正常工作之前,下面的内容是不需要的。那些传统上从未安装在单独的文件系统顶级目录- ,,/bin 等-预计可在系统达到这一最低限度可使用状态。这种设计有多种含义。例如,如果或中存在替代项,则编写使用程序的SysV初始化脚本的“ stop”子句是一种不好的风格。/etc/sbin/usr/bin/bin/sbin

shutdown是关键实用程序,始终可用。reboot仅是一种便利工具。


1
reboot是在/sbinDebian中(带的SysVinit)和Ubuntu(与暴发户)。
吉尔(Gilles)'所以

好的,因此,元答案:了解您的系统。:)我最经常使用CentOS。
沃伦·杨

同样适用于Arch(systemd),都在/ sbin中
daisy

实际上,在systemd的Linux操作系统上也不是关键实用程序,因为对于systemd而言,所有这些命令都是“兼容性”命令(正如systemd doco所拥有的)。确实,问题的前提是错误的。它们不在不同的二进制文件中。有关详细信息,请参见unix.stackexchange.com/a/196014/5132
JdeBP
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.