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

jon*_*jon 8 freebsd sh

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

我删除了/bin/sh。我重新启动了服务器,但服务器无法运行,因为它需要/bin/sh启动 rc 脚本。我也无法访问单用户模式,因为需要 sh。

有没有什么简单的方法可以重新安装bourn shell?

我尝试从 live cd 复制 sh,但在 ld-elf.so.1 库上失败了。所以我将它从 livecd 复制到 /libexec 到我的 / 分区。然后它需要 libedit.so 库,我将它复制到 /libexec 但这次它不起作用。

我尝试了一个符号链接,/usr/local/bin/bash但仍然出现“找不到 sh”类型错误。我假设这是因为/usr尚未安装,因为它是从 rc 脚本完成的。

任何帮助是极大的赞赏。

Mei*_*Mei 8

你需要用一些东西替换 /bin/sh ;这就是关键。如果您可以在启动期间进入 FreeBSD 加载程序(带有“ok”提示),请尝试以下操作:

set init_shell=/bin/csh
unset init_script
unset init_path
Run Code Online (Sandbox Code Playgroud)

我从 FreeBSD 手册页(在线)的loader(8) 中得到了这个信息。我没有这样做,但它应该可以工作(假设 /bin/csh 存在且可执行)。

如果您有一台 FreeBSD 8.2 服务器启动并在其他地方运行,您可以尝试从该来源窃取 /bin/sh 并将其放入需要的系统中。

或者,获取一个静态构建的 /bin/sh 并将其放入;静态构建的二进制文件不会有任何库问题。

编辑:我应该注意到:如果你启动到 /bin/csh,你仍然需要使用一些东西来代替 /bin/sh。您可以通过 Internet 获取它或从另一张 CD 或软件包或其他东西中复制它;使用 /bin/csh 启动可以让您进入机器。通过网络复制需要您打开网络;否则,从 CDROM 复制。

将来避免这种情况的最佳方法:

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

三样都做。


vor*_*aq7 6

好,先讲课:

  1. 与系统二进制文件不惹
    任何东西/bin/sbin/rescue在FreeBSD应单独留在家中。即使你知道你在做什么(如果你知道你在做什么,你也知道这些应该被搁置。它们真的很重要——所有这些!)

  2. 不要删除/bin/sh曾经。任何拥有它的 *NIX 系统上。
    真的。不要这样做。一个LOT脚本的依赖/bin/sh是一个Bourne shell。它打破了宇宙。
    如果你真的想你大概可以放心地用替换它复制bash像亚当ž建议,但如果你要做到这一点,你可能要静态链接是的副本bash-它拉了很多库,你在系统启动并/usr/local安装之前可能没有这些。


现在,如何解决这个烂摊子?两种选择:

选项 1:有点痛苦
转到http://www.freesbie.org/(或您选择的 FreeBSD LiveCD - 您甚至可以使用来自http://www.freebsd.org的恢复 CD)。获取 LiveCD,刻录它,然后启动它。

一旦你进入 LiveCD 环境,挂载被破坏的系统的根分区,/bin/sh从 LiveCD复制到你的机器,然后重新启动。

应该可以让您重新启动并运行——您可能需要按照Rebuilding "World"的说明进行操作,或者至少/bin/sh从与您正在运行的系统匹配的源代码树重新编译。

选项 2:不那么痛苦,没有 LiveCD
如果你周围有另一个 FreeBSD 机器,你可以挂掉(或其他一些方法来获取/bin/sh.任何媒体上都有替换外壳),然后将其复制到它应该在的位置。

重新启动,你应该没问题——与 LiveCD 相同的警告,但如果/bin/sh你不是从合理接近相同的机器上获取它。


Ada*_*man 4

不要进行符号链接,而是将您的内容复制bash/bin/sh. 使用该ldd命令查找可能驻留在 rootfs 之外的文件系统上的任何库,并将它们也复制到 rootfs。