/bin/bash 的内容是什么,如果不小心覆盖了怎么办

/bin/bash 的内容是什么,如果不小心覆盖了怎么办

我不小心用一个我本来打算放在 /bin 文件夹中的愚蠢脚本覆盖了 /bin/bash 文件。

我如何取回该文件的内容?有没有办法可以在网络上找到内容,然后将其复制回来?考虑到终端给出了“符号链接太多”的错误,我在这里有什么选择?

我对这种事情还是个新手,我很感谢我能得到的所有帮助。

编辑:我忘了提及我正在使用 Kali 2.2 Rolling,它几乎是 Debian 的,但有一些附加功能。

编辑2:我还重新启动了机器,因为直到几天前我才意识到我的错误。这使得这变得相当困难。

答案1

不要关闭你的机器。

你还有正在运行的 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 ~]$ 

答案2

bash是一个 shell,可能是你的系统 shell,所以现在奇怪的事情发生了,而 shell 的某些部分仍然在内存中。一旦您注销或重新启动,您将陷入更深的麻烦。

因此,第一件事应该是将你的 shell 更改为安全的 shell。查看你安装了哪些 shell

cat /etc/shells

然后将您的 shell 更改为那里列出的其他 shell 之一,例如

chsh -s /bin/dash

更新,因为您已经重新启动:

你很幸运,现在启动过程不依赖于bash,所以你的系统启动时,你只是无法获得命令行。但是您可以启动编辑器来编辑和更改从到行/etc/passwd中的 shell 。注销并重新登录。只是不要对该文件进行任何其他更改,否则您可能会完全搞乱您的系统。root/bin/bash/bin/dash

然后尝试重新bash安装

apt-get --reinstall install bash

如果一切成功,您可以chsh返回bash

最后:我认为,kali 是一个高度专业化的发行版,可能不适合那些不小心覆盖 shell 的人。由于这句话被称为粗鲁和严厉,我必须补充一点,这是我根据自己的经历写的。当我年轻的时候,我确实毁了我的系统,因为没有人告诉我不要以 root 身份乱搞。

答案3

如果您可以登录,但无法打开终端或以其他方式访问 shell,但可以通过 GUI 访问文件,请转至/bin,查找名称以sh(但不是.sh)结尾的文件并运行一个(通过双击或右键单击)。特别要查找以下内容:

  • sh
  • dash
  • ash
  • ksh (或ksh后跟数字;例如,  ksh93
  • zsh
  • yash

或者,作为最后的手段,

  • tcsh 或者
  • csh

如果你可以让 shell 运行,那么尝试菲利浦斯的回答

另一种方法是启动进入单用户模式,如下这些说明 但指定init=/bin/sh(或其他 shell 之一)而不是init=/bin/bash.

相关内容