Linux

/bin/bash 的內容是什麼,不小心覆蓋了怎麼辦

  • April 16, 2021

我不小心用我打算放在 /bin 文件夾中的啞腳本覆蓋了 /bin/bash 文件。

如何取回該文件的內容?有沒有辦法可以在網上找到內容,然後將它們複製回去?考慮到終端在談論“太多符號連結”時出現錯誤,我有什麼選擇?

我仍然是這種事情的新手,我很感激我能得到的所有幫助。

編輯:我忘了提到我正在使用 Kali 2.2 Rolling,它幾乎是帶有一些附加功能的 debian。

編輯2:我也重新啟動了機器,因為直到幾天前我才意識到我的錯誤。這使得這變得相當困難。

bash是一個外殼,可能是您的系統外殼,所以現在發生了奇怪的事情,而外殼的一部分仍在記憶體中。註銷或重新啟動後,您將陷入更深的麻煩。

因此,首先應該將您的外殼更改為安全的。查看您安裝了哪些 shell

cat /etc/shells

然後將您的外殼更改為那裡列出的其他外殼之一,例如

chsh -s /bin/dash

更新,因為您已經重新啟動:

你很幸運,現在啟動過程不依賴bash,所以你的系統啟動時,你只是無法獲得命令行。但是您可以啟動一個編輯器來編輯/etc/passwd和更改該root行中的 shell 從/bin/bash/bin/dash。註銷並重新登錄。只是不要對該文件進行任何其他更改,否則您可能會完全弄亂您的系統。

然後嘗試重新bash安裝

apt-get --reinstall install bash

如果一切順利,您可以chsh返回bash.

最後:我認為,kali 是一個高度專業化的發行版,可能不適合那些不小心覆蓋了他們的 shell 的人。由於這句話被稱為粗魯和苛刻,我應該補充一下,我是根據自己的經驗寫的。當我年輕的時候,我確實毀了我的系統,因為沒有人告訴我要避免以 root 身份亂搞。

不要關閉你的機器。

你還有一個正在執行的shell嗎?是重擊嗎?如果是這樣,你很好。(但不要再這樣做了。)

跑:

sudo cp /proc/$$/exe /bin/bash

瞧,一切都很好。


由於評論中有人懷疑這是否有效:

[vagrant@localhost ~]$ cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
[vagrant@localhost ~]$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[vagrant@localhost ~]$ echo $0
-bash
[vagrant@localhost ~]$ sudo rm /bin/bash
[vagrant@localhost ~]$ bash
-bash: /bin/bash: No such file or directory
[vagrant@localhost ~]$ sudo su -
su: /bin/bash: No such file or directory
[vagrant@localhost ~]$ sudo cp /proc/$$/exe /bin/bash
[vagrant@localhost ~]$ bash
[vagrant@localhost ~]$ exit
[vagrant@localhost ~]$ sudo su -
[root@localhost ~]# logout
[vagrant@localhost ~]$ 

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