我在我的一台服务器上做了一个非常糟糕的决定。
我删除了/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 脚本完成的。
任何帮助是极大的赞赏。
你需要用一些东西替换 /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 复制。
将来避免这种情况的最佳方法:
三样都做。
好,先讲课:
与系统二进制文件不惹
任何东西/bin,/sbin并/rescue在FreeBSD应单独留在家中。即使你知道你在做什么(如果你知道你在做什么,你也知道这些应该被搁置。它们真的很重要——所有这些!)
不要删除/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你不是从合理接近相同的机器上获取它。
| 归档时间: |
|
| 查看次数: |
1259 次 |
| 最近记录: |