我意外删除了/usr/bin/test
,现在无法更新、升级和安装软件包。
我已经尝试过这里的解决方案:apt-get 引发 /usr/bin/test:权限被拒绝,但这是我得到的输出:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
java-common libutempter0
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 29 not upgraded.
Need to get 1,353 kB of archives.
After this operation, 0 B of additional disk space will be used.
Ign:1 http://ph.archive.ubuntu.com/ubuntu impish/main amd64 coreutils amd64 8.32-4ubuntu2
Ign ...
Ign ...
Err:1 http://ph.archive.ubuntu.com/ubuntu impish/main amd64 coreutils amd64 8.32-4ubuntu2
Could not connect to ph.archive.ubuntu.com:80 (202.79.184.254), connection timed out
E: Failed to fetch http://ph.archive.ubuntu.com/ubuntu/pool/main/c/coreutils/coreutils_8.32-4ubuntu2_amd64.deb Could not connect to ph.archive.ubuntu.com:80 (202.79.184.254), connection timed out
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
我也尝试过sudo apt update --fix-missing
并得到了这个输出:
Err:8 http://ph.archive.ubuntu.com/ubuntu impish InRelease
Could not connect to ph.archive.ubuntu.com:80 (202.79.184.254), connection timed out
Err:9 http://ph.archive.ubuntu.com/ubuntu impish-updates InRelease
Unable to connect to ph.archive.ubuntu.com:http:
Err:10 http://ph.archive.ubuntu.com/ubuntu impish-backports InRelease
Unable to connect to ph.archive.ubuntu.com:http:
Fetched 125 kB in 37s (3,339 B/s)
sh: 1: /usr/bin/test: not found
sh: 1: /usr/bin/test: not found
sh: 1: /usr/bin/test: not found
Reading package lists... Done
请帮我。
答案1
您可以使用test
提供的命令行来busybox
临时替换丢失的/usr/bin/test
二进制文件。
首先,检查您是否有 busybox,以及它是否test
正常工作:
$ /usr/bin/busybox test -x /usr/bin/busybox && echo Works
Works
然后创建一个符号链接:
$ sudo ln -s busybox /usr/bin/test
$
$ file /usr/bin/test
/usr/bin/test: symbolic link to busybox
然后重新安装该coreutils
包,它将使用正确的二进制实现覆盖符号链接。
如果你没有busybox
,你甚至可以创建/usr/bin/test
一个 shell 脚本并利用 shell 的test
内置功能:
#!/bin/sh
test "$@"
(不要忘记使其可执行, )之后chmod +x /usr/bin/test
再次重新安装。coreutils
答案2
我能想到的最简单的解决方案,不使用包管理器(因为它不再起作用):
下载 coreutils 包:
wget http://de.archive.ubuntu.com/ubuntu/pool/main/c/coreutils/coreutils_8.32-4ubuntu2_amd64.deb
注意:如果你没有安装 wget,请使用浏览器。另请注意,确切名称截至 2022 年 1 月 - 如果您以后需要执行此操作,文件名很可能会发生变化以反映更新的软件包。
解压下载的软件包
dpkg-deb -R coreutils_8.32-4ubuntu2_amd64.deb coreutils_unpacked
复制缺失的测试二进制文件
sudo cp coreutils_unpacked/usr/bin/test /usr/bin/test
添加可执行权限
sudo chmod +x /usr/bin/test
或者如果你想下载完整的 .iso 文件
从官方网站下载 iso 文件
创建临时目录以将 iso 文件挂载到
mkdir ubuntu_iso_tmp
将 iso 文件挂载到新创建的目录中
sudo mount -o loop ~/Downloads/Ubuntu_whatever.iso ubuntu_iso_tmp
复制缺失的测试二进制文件
sudo cp ubuntu_iso_tmp/usr/bin/test /usr/bin/test
答案3
对于 的具体情况/usr/bin/test
,还有另一个程序/usr/bin/[
,它与 完全相同,只是它需要一个额外的最后一个参数,即]
。GNU coreutils 是这些程序在 Ubuntu 和其他非嵌入式 Linux 系统下的实现,它将这两个程序作为单独的可执行文件提供,因此即使其中一个程序损坏或丢失,您也可以使用另一个。/usr/bin/test
使用以下内容创建:
#!/bin/sh
/usr/bin/\[ "$@" \]
使其可执行(chmod a+rx /usr/bin/test
),你就拥有了一个完全有效的替代品/usr/bin/test
。
然后运行apt reinstall coreutils
即可恢复正常/usr/bin/test
。
答案4
您可以重新安装主程序包并让触发器执行该工作。在这种情况下coreutils
,它提供的任何工具都将由 的脚本重新安装coreutils
。不仅如此test
。
- 下载系统上安装的版本
wget http://ph.archive.ubuntu.com/ubuntu/pool/main/c/coreutils/coreutils_8.32-4ubuntu2_amd64.deb
- 将其解压到目的地
sudo dpkg --unpack coreutils_8.32-4ubuntu2_amd64.deb
- 使用其触发器来配置或重新配置它:
sudo dpkg --configure coreutils
完毕。