我正在为一个嵌入式 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 上,您可以直接将符号链接放回去,而不必对软件包进行任何调整。
进一步阅读
- https://unix.stackexchange.com/a/196471/5132
- https://unix.stackexchange.com/a/196014/5132
- https://unix.stackexchange.com/questions/77029/
- 拆分出 upstart-sysv 1422681. Ubuntu Launchpad 错误列表。规范。
- 詹姆斯·亨特(2015)。 “永久切换回 upstart”。 面向新用户的 systemd. Ubuntu 维基。Canonical。
答案2
我认为上述答案可以给出结果,但我会使用逻辑方法来达到相同的结果。
要知道特定文件属于哪个包,您可以使用:
dpkg -S /path-to-file
现在让我们检查shutdown
并reboot
路径
$which shutdown
/sbin/shutdown
$which reboot
/sbin/reboot
现在让我们检查一下属于它的包
$ dpkg -S /sbin/shutdown
upstart: /sbin/shutdown
$ dpkg -S /sbin/reboot
upstart: /sbin/reboot
因此,作为结论shutdown
,reboot
它属于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
)。尽管这可能有点过度。