我在我的一台服务器上做了一个非常糟糕的决定。
我删除了/bin/sh 。 我重新启动服务器,服务器将不会运行,因为它需要/bin/sh来启动rc脚本。 我不能访问单用户模式,因为需要sh。
有没有简单的方法来重新安装BOUNH壳?
我试图从活CD复制sh,它在ld-elf.so.1库上失败。 所以我复制到/ libexec从livecd到我的/分区。 然后它需要libedit.so库,并将其复制到/ libexec,但这次不工作。
我尝试了/usr/local/bin/bash的符号链接,但仍然显示“无法findsh”types的错误。 我假设这是因为/usr尚未安装,因为它是从一个RC脚本完成的。
任何帮助是极大的赞赏。
你需要用/ bin / shreplace; 这是关键。 如果您可以在启动过程中进入FreeBSD加载程序(带有“ok”提示符),请尝试如下所示:
set init_shell=/bin/csh unset init_script unset init_path
我从FreeBSD的手册页(在线)中从loader(8)得到了这个信息。 我没有这样做,但它应该工作(假设/ bin / csh是存在的和可执行的)。
如果你有一台FreeBSD 8.2服务器在其他地方运行,你可以尝试从这个源中窃取/ bin / sh,然后把它放到需要的地方。
或者,build立一个静态的/ bin / sh,然后把它放进去。 静态构build的二进制文件不会有任何库问题。
编辑:我应该注意到:如果你启动到/ bin / csh,你仍然必须得到一些东西来使用,而不是/ bin / sh。 你可以通过互联网获取它,或从另一张CD或一个软件包中复制它; 使用/ bin / csh启动让你进入机器。 通过networking复制需要您启动networking; 否则,从CDROM复制。
今后避免这种情况的最佳方法是:
做所有三个。
好,先讲讲:
不要使用系统BINARY
FreeBSD中/bin , /sbin和/rescue上的任何内容都应该保留。 即使你知道你在做什么(如果你知道你在做什么,你也知道这些应该被单独留下,他们真的很重要 – 所有这些都是!)
不要删除/bin/sh 。 EVER。 在任何具有它的* NIX系统上。
真。 不要这样做。 很多脚本依靠/bin/sh作为Bourne Shell。 它打破了宇宙。
如果你真的想要你可以安全地用Adam Zbuild议的bash 副本replace它,但是如果你打算这么做的话,你可能需要静态地链接这个bash副本 – 它引入了很多库,在系统启动和/usr/local安装之前,您可能没有这些设置。
现在,如何解决这个烂摊子? 两个选项:
备选scheme1:有点痛苦
前往http://www.freesbie.org/ (或者您select的FreeBSD LiveCD – 您甚至可以使用http://www.freebsd.org上的恢复光盘)。 抓住LiveCD,刻录它,并启动它。
一旦进入LiveCD环境,挂载你的系统的根分区,将LiveCD中的/bin/sh复制到你的机器上,然后重新启动。
这应该让你备份和运行 – 你可能想遵循重build“世界”的指示,或者至less重新编译/bin/sh从与你的运行系统匹配的源代码树。
scheme2:减轻痛苦,没有LiveCD
如果你有另外一个FreeBSD的盒子,你可以用它(或者其他一些方式来把你的手指放在/bin/sh的副本上,把你的FreeBSD机器放在单用户模式下)configurationnetworking(或者挂载任何媒体更换shell),并将其复制到应有的位置。
重新启动,你应该没问题 – 和LiveCD一样的警告,但是如果你抓住/bin/sh不是从一个合理的接近相同的机器。
将你的bash复制到/bin/sh而不是symlinking。 使用ldd命令查找可能驻留在除rootfs之外的文件系统上的任何库,并将它们也复制到rootfs。