Rm

在遠端伺服器上意外執行了 sudo rm /*

  • August 6, 2014

我在遠端 Ubuntu 伺服器中以 root 身份登錄時意外執行rm /*並刪除了幾乎所有的二進製文件,目前我既不能通過 ssh 或 ftp 登錄來恢復文件(希望最好)。

有沒有辦法以某種方式解決這個混亂,或者我應該打電話給數據中心並要求格式?

rm /*應該刪的很少。那裡沒有-r可以遞歸刪除任何東西的標誌,沒有它,目錄將不會被刪除(即使目錄被刪除,也只能刪除空的目錄)。此答案基於您沒有執行的假設rm -rf /*

結果根文件系統中唯一的文件可能是核心和 initrd 的符號連結(儘管在我正在查看的一個 Ubuntu 系統上,它們不存在)或/lib6464 位系統上的符號連結。

問題可能只是/lib64 -> /lib符號連結已被刪除。但這很討厭,因為幾乎每個程序都將依賴該符號連結:

$ ldd /bin/bash
...
   /lib64/ld-linux-x86-64.so.2 (0x00007f8946ab7000)

ld-linux是動態載入器,如果它不可用,則無法執行任何動態執行檔。這將使登錄變得極其困難,您可能根本無法登錄。

一位救世主可能是busybox。執行這個來檢查:

$ ldd /bin/busybox
   not a dynamic executable

在這種情況下,busybox 應該是可執行的,但問題是如何執行它?

如果您可以訪問引導載入程序提示,您可以使用 引導init=/bin/static-sh,其中 static-sh 是一個符號連結busybox(檢查是否/bin/static-sh存在 - 它在我的系統上,但它不是標準的 Ubuntu。 這個錯誤表明它是可用的.)

擁有根 shell 後,您可以重新創建/lib64符號連結。您可能需要首先將根文件系統重新掛載為讀/寫。busybox 應該內置了這些工具,您可以按如下方式執行它們:

# busybox mount -o remount,rw /
# busybox ln -s /lib /lib64
# /bin/bash
bash# 

如果 bash 有效,那麼問題應該得到解決。

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