如何在 Linux 中恢复或恢复已删除的命令

在这个简短的教程中,我们将学习如何在 Linux 中使用 coreutilsbusybox.

我们通常使用 rm 在 Linux 中删除东西的命令,对吧? 是的。 如果我们使用 rmrm rm? 换句话说,如果我们删除 /bin/rm 文件使用 rm 命令? 我一直想知道如果我真的在 Linux 机器上这样做会发生什么。 所以我迅速启动了一个 Ubuntu VM 并删除了 /bin/rm 通过运行以下命令文件:

$ sudo rm /bin/rm

我以为我可以轻松恢复已删除的 rm 通过重新安装命令 Gnu coreutils 包,因为 rm 命令是一部分 coreutils 包,不是吗?

所以我尝试重新安装 coreutils 包使用 apt 包管理器如下:

$ sudo apt install --reinstall coreutils

哦,伙计,我错了! 这 apt 包管理器需要 rm,所以它不能重新安装 coreutils 包裹。

Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded.
Need to get 1249 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 https://in.archive.ubuntu.com/ubuntu focal/main amd64 coreutils amd64 8.30-3ubuntu2 [1249 kB]
Fetched 1249 kB in 2s (747 kB/s)    
dpkg: warning: 'rm' not found in PATH or not executable
dpkg: error: 1 expected program not found in PATH or not executable
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin
E: Sub-process /usr/bin/dpkg returned an error code (2)
dpkg:警告:在 PATH 中找不到“rm”或不可执行

我也尝试从源代码编译它,但它也不起作用,因为 Makefile 用途 rm. 直到现在,我才知道没有重新安装是不可能的 rm 命令。

我认为恢复已删除的命令很简单。 但是,在这种特殊情况下,我无法恢复 rm 命令。 最终我在几次网络搜索后找到了解决方案。 如果你曾经不小心删除了 rm 命令(我希望你不会),你可以使用以下任何一种方法来恢复它。 不只是 rm 命令,您可以使用此过程来恢复由 coreutils 包裹。

使用 coreutils 恢复 Linux 中已删除的命令

对于那些不知道的人, Gnu coreutils 包提供了基本的核心命令,例如 cat, ls, rm, mkdir, rmdir, touch, 还有很多。 它预装了大多数 GNU/Linux 发行版。

恢复已删除的 rm 命令,首先创建一个名为的空二进制文件 "rm" 在下面 /bin/ 地点:

$ sudo touch /bin/rm

使其可执行:

$ sudo chmod +x /bin/rm

下载 coreutils 使用命令打包:

$ apt download coreutils

请注意,我们无法重新安装 coreutils 但下载它。 另外,我们不需要使用 sudo 下载包的权限。

用以下内容解压下载的包 dpkg 命令:

$ sudo dpkg --unpack coreutils_8.30-3ubuntu2_amd64.deb

上面的命令只是解包 coreutils 包,但不会配置它。

使用 coreutils 包恢复 Linux 中已删除的命令

完毕! 现在,您可以开始使用 rm 命令。 验证是否功能 rm 命令恢复,只需删除任何不需要的文件。 为了 example, 我删除了 coreutils 我之前下载的包:

$ rm coreutils_8.30-3ubuntu2_amd64.deb 
在 Linux 中使用 rm 命令删除文件在 Linux 中使用 rm 命令删除文件

伟大的! 有用!

而且,请永远不要在生产系统上这样做!

在 Linux 中使用 busybox 恢复已删除的命令

忙箱 是一个软件套件,它将许多常见的 UNIX 实用程序提供到一个小型可执行文件中。 它为您通常在 GNU fileutils、shellutils 等中找到的大多数实用程序提供了替代品。它在 Debian 及其衍生产品(如 Ubuntu 和许多其他 Linux 发行版)中默认可用。

您可以查看提供的核心命令行实用程序列表 busybox 使用命令:

$ busybox --list

样本输出:

[
[[
acpid
adjtimex
ar
arch
arp
arping
ash
awk
basename
bc
blkdiscard
blockdev
brctl
bunzip2
busybox
bzcat
bzip2
cal
cat
[..]
列出busybox命令行实用程序列出busybox命令行实用程序

在我的 Ubuntu 20.04 LTS 桌面中,busybox 提供了 263 命令行实用程序。

现在让我们恢复已删除的 rm 通过临时创建一个命令 符号链接 给它。 运行以下命令来临时符号链接 /bin/rm/bin/busybox

$ ln -s busybox /bin/rm

然后重新安装 coreutils 使用命令打包:

$ sudo apt install --reinstall coreutils

就是这样。 上述命令将恢复 rm 命令。

如前所述,此过程不仅用于恢复 rm 命令。 我想我们可以使用这些方法恢复几乎所有的 Linux 命令。 在虚拟机上自己检查一下,看看它是否有效! 再次, 不要在生产系统中这样做. 你被警告了!

  • 在 Linux 中恢复对 Chmod 命令的可执行权限
  • Moreutils – 更多有用的 Unix 实用程序的集合