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

Lan*_*nes 12 linux shutdown history

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

shutdown -r
Run Code Online (Sandbox Code Playgroud)

reboot
Run Code Online (Sandbox Code Playgroud)

或者他们有什么不同?

ico*_*ast 15

我们不一定同时需要它们,但由于 Unix 的历史及其版本的多样性,我们同时拥有它们。

从他们各自的手册页:

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

shutdown 更通用,更强大,而 reboot 更友好,更容易记住。

shutdown 允许您指定时间参数(例如,在 5 分钟后重新启动)并允许您执行除重新启动之外的许多操作,包括:

  • 您可以启动用户而不是实际关闭
  • 你可以让系统休眠而不是关闭
  • 您可以简单地关闭而不重新启动(如halt命令)
  • 您可以为系统上的用户添加自定义警告消息

但是,如果您现在只想重新启动系统,则键入rebootshutdown -r now.


War*_*ung 6

除了 iconoclast 所写的内容之外,这两个程序之间还有一个重要的区别:shutdownis in /sbin, while rebootis in /usr/bin

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

下面的内容/usr是在系统启动到足以使系统功能最低限度之前不必可用的内容。那些传统上从未安装在单独的文件系统顶级目录- ,,等-预计可在系统达到这一最低限度可使用状态。这种设计有多种含义;例如,如果在或 中有替代方案,则编写使用程序的 SysV init 脚本的“停止”子句是一种糟糕的风格。/bin/etc/sbin/usr/bin/bin/sbin

shutdown是关键实用程序,始终可用。reboot只是一个方便实用程序。


Ric*_*ner 6

这两个命令执行不同的操作,但是它们最终可能会相互调用,这就是为什么它们似乎执行相同的操作!

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

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