重启和关闭可执行文件丢失

use*_*741 5 reboot restart

我正在为嵌入式 Linux 项目使用一些专有脚本。其中一个脚本用指向 Perl 程序的符号链接替换了 /sbin/ 中的重启和关闭可执行文件。我过早地运行了这个脚本,现在我缺少这两个可执行文件。

我在 Linux 中寻找包含这些可执行文件的包的努力是徒劳的,我尝试了 upstart 以及我能想到或搜索的其他几个包。

有关恢复\重新安装这些可执行文件的任何建议?我总是可以只使用 init 0 和 init 6 ......但我更喜欢可执行文件。

Jde*_*eBP 12

现在,版本 15 给出了答案。

其他人都假设了版本 14,并告诉你看看你已经看过的地方,但没有成功。他们错过了你在问题中所说的线索:

我在 Linux 中寻找包含这些可执行文件的包的努力是徒劳的,我已经尝试过暴发户

在开箱即用的版本 15 中,没有任何此类可执行文件。他们符号链接,下手,这是由提供的systemd-SYSV包。你不需要重新安装任何东西,真的。您以这些名称运行的程序尚未删除。您只需将符号链接放回去。

ln -f -s -- ../bin/systemctl /sbin/reboot
ln -f -s -- ../bin/systemctl /sbin/shutdown

当然,你所说的关于 upstart 的线索是,这些命令已从版本 15 的 upstart 包中删除,正是为了让它可以从属 systemd 安装。将 upstart 作为进程 #1 运行所需的冲突 upstart 命令和工具被移到upstart-sysv 包中。所以当然你没有在 upstart 包中找到它们。

不要混合和匹配这些工具集。无论是systemd-sysvupstart-sysv。不是两者的混合。正如我所说,在 systemd Ubuntu Linux 版本 15 上,您可以直接将符号链接放回原处,而根本不用担心软件包。

进一步阅读

  • 这个答案让我发现我真的不需要关机。在我没有包含它的 Linux 安装中,`systemctl poweroff` 和 `systemctl reboot` 工作得很好。谢谢。 (2认同)

May*_*hux 2

我认为上面的答案可以给出结果,但我将使用逻辑方法来达到相同的结果。

要了解特定文件属于哪个包,您可以使用:

dpkg -S /path-to-file
Run Code Online (Sandbox Code Playgroud)

现在让我们检查shutdownreboot路径

$which shutdown 
/sbin/shutdown

$which reboot
/sbin/reboot
Run Code Online (Sandbox Code Playgroud)

现在让我们检查一下属于它的包

$ dpkg -S /sbin/shutdown
upstart: /sbin/shutdown

$ dpkg -S /sbin/reboot
upstart: /sbin/reboot
Run Code Online (Sandbox Code Playgroud)

所以作为结论shutdownreboot属于upstart软件包,所以现在您可以轻松地重新安装软件包

sudo apt-get install --reinstall upstart
Run Code Online (Sandbox Code Playgroud)