我正在为嵌入式 Linux 项目使用一些专有脚本。其中一个脚本用指向 Perl 程序的符号链接替换了 /sbin/ 中的重启和关闭可执行文件。我过早地运行了这个脚本,现在我缺少这两个可执行文件。
我在 Linux 中寻找包含这些可执行文件的包的努力是徒劳的,我尝试了 upstart 以及我能想到或搜索的其他几个包。
有关恢复\重新安装这些可执行文件的任何建议?我总是可以只使用 init 0 和 init 6 ......但我更喜欢可执行文件。
Jde*_*eBP 12
其他人都假设了版本 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 上,您可以直接将符号链接放回原处,而根本不用担心软件包。
我认为上面的答案可以给出结果,但我将使用逻辑方法来达到相同的结果。
要了解特定文件属于哪个包,您可以使用:
dpkg -S /path-to-file
Run Code Online (Sandbox Code Playgroud)
现在让我们检查shutdown并reboot路径
$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)
所以作为结论shutdown,reboot属于upstart软件包,所以现在您可以轻松地重新安装软件包
sudo apt-get install --reinstall upstart
Run Code Online (Sandbox Code Playgroud)