现在,版本 15 答案。

现在,版本 15 答案。

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

我试图找到 Linux 中哪个软件包包含这些可执行文件,但徒劳无功,我尝试了 upstart 以及我能想到或搜索到的其他几个软件包。

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

答案1

现在,版本 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-sysv要么那样upstart-sysv。不要两者兼而有之。正如我所说,在 systemd Ubuntu Linux 版本 15 上,您可以直接将符号链接放回去,而不必对软件包进行任何调整。

进一步阅读

答案2

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

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

dpkg -S /path-to-file

现在让我们检查shutdownreboot路径

$which shutdown 
/sbin/shutdown

$which reboot
/sbin/reboot

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

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

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

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

sudo apt-get install --reinstall upstart

答案3

在我的系统/sbin/reboot

[romano:~] % apt-file search /sbin/reboot
molly-guard: /usr/sbin/reboot
upstart: /sbin/reboot

因此看起来包裹里upstart有它;这在这里得到证实:http://packages.ubuntu.com/trusty/amd64/upstart/filelist

如果你从http://archive.ubuntu.com/ubuntu/pool/main/u/upstart/(明确更改您的版本)并使用您拥有的档案管理器打开它:

在此处输入图片描述

...所以是的,它在那里。你应该能够通过重新安装来恢复它们;原则上应该是

apt-get install --reinstall upstart 

但要小心,这是一个相当基本的包,所以我会在控制台上执行此操作,没有图形界面,可能在单用户模式(这就是我在这里省略必要内容的原因sudo)。尽管这可能有点过度。

答案4

你可以通过出色的 Ubuntu 软件包搜索引擎找到几乎所有你要找的东西。例如重启关闭。

您可以按架构和版本过滤结果。

根据所显示的内容,您正在寻找 upstart 包。

测试表明,您可以使用命令成功重新安装sudo apt-get install --reinstall upstart。我重新启动只是为了确保 upstart 正常工作。我在终端窗口中输入了命令。

这些结果是在 Ubuntu 14.04 LTS 上获得的

相关内容