为什么我们需要在不同的二进制文件中提供重启功能?
shutdown -r
和
reboot
或者他们在某些方面有什么不同?
答案1
我们不一定需要它们,但由于 Unix 的历史及其版本的多样性,我们同时拥有它们。
从他们各自的手册页:
- 关机实用程序出现在 4.0BSD 中。
- AT&T UNIX 版本 6 中出现了重新启动实用程序。
shutdown 更通用,更强大,而reboot 更友好,更容易记住。
shutdown 允许您指定一个临时参数(例如,在 5 分钟后重新启动),并允许您执行除重新启动之外的许多操作,包括:
- 你可以只是踢掉用户而不是真正关闭
- 您可以让系统进入睡眠状态而不是关闭
- 您可以简单地关闭而无需重新启动(如halt命令)
- 您可以为系统上的用户添加自定义警告消息
但是,如果您现在只想重新启动系统,则键入reboot
比更容易shutdown -r now
。
答案2
这两个命令执行不同的操作,但是它们最终可以互相调用,这就是为什么它们似乎做同样的事情!
reboot
将调用内核来实际触发硬件重新启动。然而,只有当系统准备好关闭时,它才会执行此操作 - 所有守护进程和用户进程都应停止,文件系统卸载等。因此,它会检查系统运行级别,如果它不是 0 或 6,那么它实际上会调用给你的命令shutdown
。
shutdown
导致系统运行级别发生更改。运行级别更改(更改为 0 表示停止,更改为 6 表示重新启动)在 /etc/rc0.d 或 rc6.d 中运行大量脚本,用于关闭守护进程、卸载文件系统等。最后,这些脚本调用halt
or reboot
- 这次系统处于正确的运行级别,它们指示内核重新启动(或停止)。
答案3
除了 iconoclast 所写的内容之外,这两个程序之间还有一个重要区别:shutdown
is in /sbin
,而reboot
is in /usr/bin
。
您可能会问,为什么这很重要?我会告诉你。
下面的内容/usr
是那些在系统启动到足以使系统发挥最低限度功能之前不必可用的内容。传统上从未安装在单独文件系统上的顶级目录(/bin
、/etc
、/sbin
等)预计在系统达到此最低有用状态时可用。这种设计有多种含义;例如,编写 SysV 初始化脚本的“stop”子句是一种不好的风格,该脚本使用 中的程序,如果或/usr/bin
中有替代方案。/bin
/sbin
shutdown
是关键实用程序,始终可用。reboot
只是一个便利实用程序。