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


24

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

如何获取该文件的内容?有什么方法可以在网上找到内容,然后将它们复制回去?考虑到该终端在谈论“太多符号链接”时出错,我在这里有什么选择?

我仍然是这种事情的新来者,我很感谢我所能获得的所有帮助。

编辑:我忘了提到我在Kali 2.2 Rolling上,这几乎是具有一些附加功能的debian。

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


9
删除了bash?只需使用zsh :-) </ troll>
凯文


物理还是虚拟机?
本·阿弗林

9
下次:不要将东西放在系统目录中。如果您想要自定义脚本和内容,$HOME/.bin则将自己设为a 并将其添加到您的脚本中,或者如果需要在系统范围内PATH使用,请使用/usr/local/bin。或者,甚至更好地构建一个程序包。
光谱

Answers:


33

bash是外壳程序,可能是您的系统外壳程序,因此现在发生了奇怪的事情,而外壳程序的某些部分仍在内存中。注销或重新启动后,您将面临更大的麻烦。

因此,第一件事应该是将您的外壳更改为安全的外壳。看看您已经安装了什么外壳

cat /etc/shells

然后将您的外壳更改为此处列出的其他外壳之一,例如

chsh -s /bin/dash

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

您很幸运,当今的启动过程不再依赖bash,因此您的系统启动时,您将无法获得命令行。但是您可以启动编辑器来编辑/etc/passwd外壳程序并将其root从更改/bin/bash/bin/dash。注销并再次登录。只是不要对该文件进行任何其他更改,否则您可能会完全破坏系统。

然后尝试重新安装bash使用

apt-get --reinstall install bash

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

最后:我认为,kali是一个高度专业化的发行版,可能不适合意外覆盖其外壳的用户。由于这句话被称为粗鲁和苛刻,我应该补充说,我是根据自己的经验写的。年轻的时候,我确实毁了我的系统,因为没人告诉我避免以root身份乱搞。


3
@ dr01:鉴于bash转义的工作原理,可能是引号放错了。想想command > /bin/bash ...command > (/bin/bash ...)
MSalters

7
最后一句话很严厉... :)
James Reinstate Monica Polk

6
@MSalters 以root身份运行的引号放错了位置。那是两个错误。第二个当然是作为root用户而不是非特权用户来尝试复杂的管道。
derobert

12
@JamesKPolk不,一点都不苛刻。这是简单的事实。Kali是专为专家设计的专业工具。他们甚至在网页上声明了很多。如果您不是专家,那么您真的没有经营Kali的业务。
terdon

3
最后一句话并不苛刻。这是简单的事实。
安德里亚·拉扎罗托

65

不要关闭机器。

您还有运行中的外壳程序吗?是bash吗?如果是这样,那很好。(但不要再这样做。)

跑:

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 ~]$ 

18
无论如何,在此之后,建议从您的发行版中重新安装bash,例如以获取正确的权限(某些rootkit hunter可能会对那里的更改感到惊讶),还恢复硬链接或符号链接(例如/bin/shrbash
Giacomo Catenazzi

4
@GiacomoCatenazzi,实际上,此方法保留了权限-在root运行时默认cp。硬链接是一个好点。
通配符

1
机器重新启动。我无法打开普通的外壳,但是可以通过GUI编辑内容。如前所述,我收到一条错误消息,指出“无法执行子进程/ bin / bash。(太多级别的符号链接)。”
GarrukApex

5

如果您可以登录但不能打开终端或以其他方式访问外壳,但是可以通过GUI访问文件,请转到/bin,查找名称以sh(但不是.sh)结尾的文件,然后运行一个文件(通过双击)或单击鼠标右键)。特别是,寻找以下内容:

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

或者,作为最后的手段,

  • tcsh 要么
  • csh

如果可以运行Shell,请尝试Philippos的答案

另一种方法是按照这些说明引导到单用户模式, 但要指定init=/bin/sh(或使用其他外壳程序之一)而不是init=/bin/bash

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.