我意外删除了 /usr/bin/test,现在无法更新、升级和安装软件包

我意外删除了 /usr/bin/test,现在无法更新、升级和安装软件包

我意外删除了/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

我能想到的最简单的解决方案,不使用包管理器(因为它不再起作用):

  1. 下载 coreutils 包:

    wget http://de.archive.ubuntu.com/ubuntu/pool/main/c/coreutils/coreutils_8.32-4ubuntu2_amd64.deb
    

    注意:如果你没有安装 wget,请使用浏览器。另请注意,确切名称截至 2022 年 1 月 - 如果您以后需要执行此操作,文件名很可能会发生变化以反映更新的软件包。

  2. 解压下载的软件包

    dpkg-deb -R coreutils_8.32-4ubuntu2_amd64.deb coreutils_unpacked
    
  3. 复制缺失的测试二进制文件

    sudo cp coreutils_unpacked/usr/bin/test /usr/bin/test
    
  4. 添加可执行权限

    sudo chmod +x /usr/bin/test
    

或者如果你想下载完整的 .iso 文件

  1. 从官方网站下载 iso 文件

  2. 创建临时目录以将 iso 文件挂载到

    mkdir ubuntu_iso_tmp
    
  3. 将 iso 文件挂载到新创建的目录中

    sudo mount -o loop ~/Downloads/Ubuntu_whatever.iso ubuntu_iso_tmp
    
  4. 复制缺失的测试二进制文件

    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

  1. 下载系统上安装的版本
    wget http://ph.archive.ubuntu.com/ubuntu/pool/main/c/coreutils/coreutils_8.32-4ubuntu2_amd64.deb
    
  2. 将其解压到目的地
    sudo dpkg --unpack coreutils_8.32-4ubuntu2_amd64.deb
    
  3. 使用其触发器来配置或重新配置它:
    sudo dpkg --configure coreutils
    

完毕。

相关内容