我在我的一个服务器上做了一个非常糟糕的决定。
我删除了/bin/sh。我重新启动了服务器,服务器将无法运行,因为它需要/bin/sh来启动rc脚本。我也不能访问单一用户模式,因为需要sh。
有什么简单的方法来重新安装bourn shell吗?
我试着从一张live中复制sh,它在ld-elf.so.1库中失败了。所以我将它从livecd复制到/libexec到我的/分区。然后,它需要libedit.so库,我将其复制到/libexec,但这次它无法工作。
我尝试了一个指向/usr/local/bin/bash的符号链接,但这仍然给我带来了“无法找到sh”类型的错误。我认为这是因为/usr尚未挂载,因为它是从rc脚本中完成的。
任何帮助都是非常感谢的。
发布于 2011-12-16 15:58:00
您需要用一些东西替换/bin/sh;这是关键。如果您可以在启动时(使用"ok“提示符)进入FreeBSD加载程序,请尝试如下所示:
set init_shell=/bin/csh
unset init_script
unset init_path我从装载机(8)从FreeBSD手册页面(在线)获得了这些信息。我没有这样做,但它应该可以工作(假设/bin/csh存在并可执行)。
如果您在其他地方启动并运行了一个FreeBSD 8.2服务器,您可以尝试从该源窃取/bin/sh,并在需要时将其放到系统中。
或者,获取静态构建的/bin/sh并将其放入;静态构建的二进制文件不会出现任何库问题。
编辑:我应该注意到:如果引导到/bin/csh,仍然需要使用一些东西而不是/bin/sh。您可以通过Internet获取它,也可以从另一张CD或包或其他东西中复制它;使用/bin/csh引导可以让您进入机器。通过网络进行复制需要打开网络;否则,从CDROM复制。
今后避免这种情况的最佳办法是:
把这三个都做好。
发布于 2011-12-16 16:13:50
好的,第一节课:
/bin、/sbin和/rescue on FreeBSD中的任何东西都应该单独使用。即使你知道你在做什么(如果你知道你在做什么,你也知道这些应该是单独的。)他们真的很重要--所有人!)/bin/sh。永远都不会。在任何有它的NIX系统上。真的。不要这样做。很多脚本都依赖于/bin/sh作为Bourne。它破坏了universe. --如果你真的想要的话--你可能可以像亚当Z建议的那样安全地用bash来代替它,但是如果你要这样做的话,你可能想静态地链接bash的拷贝--它吸引了很多库,在系统运行和/usr/local挂载之前,你可能没有这些库。现在,如何解决这个烂摊子?有两种选择:
备选案文1:有点痛苦
转到http://www.freesbie.org/ (或者您选择的FreeBSD LiveCD --您甚至可以使用http://www.freebsd.org中的恢复CD进行此操作)。抓起LiveCD,烧掉它,然后引导它。
在LiveCD环境中挂载已崩溃系统的根分区后,将/bin/sh从LiveCD复制到计算机,然后重新启动。
这将使您能够重新启动并运行--您可能希望按照重建“世界”的说明,或者至少从与运行系统相匹配的源树中重新编译/bin/sh。
选项2:不那么痛苦,没有LiveCD
如果您有另一个FreeBSD盒,您可以关闭(或其他一些方法使您的手指在/bin/sh的副本,使您的FreeBSD机器在单一用户模式。配置网络(或安装任何有替换外壳的媒体),并将其复制到它应该在的位置。
重新启动,您应该是好的-相同的LiveCD警告,尽管如果您获取的/bin/sh不是从一个合理地接近相同的机器。
发布于 2011-12-16 15:56:06
而不是符号链接,而是将bash复制到/bin/sh中。使用ldd命令查找可能驻留在除rootfs以外的文件系统上的任何库,并将它们复制到rootfs。
https://serverfault.com/questions/341654
复制相似问题