Command-Line

我刪除了/bin/rm。我該如何恢復它?

  • February 19, 2022

只是為了好玩,我想我會在執行 Raspbian 的 Raspberry Pi 上使用這個命令:

sudo rm -f /bin/rm

我以為我可以重新安裝coreutils:我錯了!

apt-get install --reinstall coreutils給出了一個錯誤dpkg,說它無法刪除包。從原始碼編譯不起作用,因為Makefile使用rm.

我怎樣才能得到工作rm回來?

sudo touch /bin/rm && sudo chmod +x /bin/rm
apt-get download coreutils
sudo dpkg --unpack coreutils*

而且再也不會。


你為什麼不使用 sudo 和 apt-get?

因為該download命令不需要它:

download

download 會將給定的二進制包下載到目前目錄。

因此,除非您在某個無法編寫的目錄中,否則您不需要使用sudo,並且稍後可能會出現問題,因為您需要root刪除/移動包的權限。

busyboxinitramfs. _

busybox將大多數核心命令行實用程序捆綁在一個執行檔中。

您可以臨時符號連結/bin/rm/bin/busybox

ln -s busybox /bin/rm

得到一個工作rm(之後你可以做你的apt-get install --reinstall coreutils)。

相同的方法可用於包含的所有其他實用程序busybox。該列表因一種部署而異。您可以使用 獲取列表busybox --list

但請注意,它們是相應實用程序的有限版本。它們有時支持 GNU 擴展,但通常不支持,其中一些甚至不支持所有標準/POSIX 功能(某些功能可以在編譯時啟用/禁用)。

或者,您可以使用zsh’ 的內置 rm:

#! /bin/zsh
zmodload zsh/files
rm "$@"

zsh/files模組提供了一些額外的內置命令(rm, mv, ln, mkdir, rmdir, chown, chmod, sync)。在這種情況下或當您無法派生更多程序但確實有互動式zsh執行時,它很有用。

ksh93還有一些額外/可選的命令,但不在rm其中(basename, chmod, dirname, getconf, head, mkdir, logname, cat, cmp, cut, uname, wc, sync)。您可以通過以下方式呼叫它們:

command /opt/ast/bin/the-command

ksh93腳本中。

引用自:https://unix.stackexchange.com/questions/115743