FreeBSD 8.2,删除/ bin / sh,无法启动

我在我的一台服务器上做了一个非常糟糕的决定。

我删除了/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复制。

今后避免这种情况的最佳方法是:

  1. 不要从/ bin中删除! (这是最简单的部分)
  2. 有一个静态构build/ bin / sh,而不是dynamic链接。
  3. 备份sh,例如/bin/sh.static。

做所有三个。

好,先讲讲:

  1. 不要使用系统BINARY
    FreeBSD中/bin/sbin/rescue上的任何内容都应该保留。 即使你知道你在做什么(如果你知道你在做什么,你也知道这些应该被单独留下,他们真的很重要 – 所有这些都是!)

  2. 不要删除/bin/shEVER。任何具有它的* 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。