在CentOS 6.4中,我意外地删除了符号链接libc.so.6。如何获得sudo权限以重新创建它?

3

我不小心删除了符号链接 /lib64/libc.so.6 -> /lib64/libc-2.12.so

$ sudo rm libc.so.6

我无法使用任何东西,包括ls命令。我键入的任何命令都会出现错误。

ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

我已经尝试过

$ export LD_PRELOAD=/lib64/libc-2.12.so

在执行完这个命令之后,我可以使用 lsln ...,但依然不能使用 sudo ln ...sudo -E ln ...。每次都会收到以下错误提示:
sudo: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

这是一台远程服务器,因此我无法使用现场CD。我目前拥有一个 SSH Bash 会话,但无法建立新会话。我有 sudo 权限,但没有 root 密码。

所以我的问题是我需要运行 sudo sln -s libc-2.12.so libc.so.6 来重新创建符号链接 libc.so.6,但是我没有 libc.so.6 就无法运行 sudo

我该如何解决这个问题?谢谢~


也许你可以尝试从另一台机器上将相同版本的libc.so.6文件通过scp复制到你的机器上... - SidR
从不同的镜像(可能是现场 CD)引导。在您恢复 libc.so.6 之前,您将无法运行任何命令,因此您必须找到一种运行允许您替换符号链接的操作系统的方法。 您不必安装操作系统;您只需要运行它足够长的时间,以便能够挂载您正常操作系统的根文件系统并修复符号链接。 - Jonathan Leffler
@rakib 是的,但不是针对root拥有的文件。 - kangshiyin
有一个开关——你可能需要使用它,再加上键盘上的魔法咒语(或者实际上是CD驱动器中的实际光盘),才能从新镜像重新启动系统。这并不简单;我不想去做这件事。现在这个问题应该已经被迁移到ServerFault或SuperUser了。你可能需要假装升级你的操作系统(即使6.4是最新版本,你可能还能够“升级”它,从而恢复库)。删除所有系统可执行文件都依赖的符号链接是一种非常有效的禁用系统的方法。 - Jonathan Leffler
请问如何在删除符号链接 libc.so.6 后恢复? - Kris Chang
显示剩余6条评论
3个回答

2
我使用服务器的 /sbin 中已经存在的静态链接版本的 "ln" 解决了这个问题。
例如,以下命令可恢复我的配置: /sbin/sln /lib64/libc-2.5.so /lib64/libc.so.6

1
有点尴尬 :) 但我在Ubuntu 12.04.3上也遇到了这个问题(虽然不是CentOS 6.4,但我认为这可能仍然有所帮助)。
由于我的Ubuntu无法启动,我使用了一个liveUSB启动,然后挂载了我的硬盘并创建了符号链接(我确实有文件本身 libc-2.15.so),然后问题得到解决。
具体细节如下:
  1. 我请好友借用了他的电脑半个小时
  2. 我从这里下载了与我的Ubuntu镜像完全相同的iso文件(12.04.3版本,如果你只是缺少符号链接,那么可以使用任何版本,只要它可以挂载驱动器): link
  3. 我确保他的Ubuntu安装了usb-creator-gtk($ sudo apt-get install usb-gtk-creator,我确定Windows有相当于USB启动创建工具)
  4. 使用usb-creator-gtk创建了liveUSB
  5. 使用它启动了我的电脑(你可能需要更改BIOS设置以允许首先启动外部USB)
  6. 一旦从live USB启动后,通过运行Ubuntu分区工具找到了我的硬盘分区 - 我的分区类型为ext4且在/dev/sdb1
  7. 通过执行命令$ mkdir /home/ubuntu/mnt$ sudo mount-t ext4 /dev/sdb1 /home/ubuntu/mnt来挂载它
  8. 然后在该文件夹中进行操作$ cd /home/ubuntu/mnt
  9. 从该位置创建符号链接 $ sudo ln -s lib/x86_64-linux-gnu/libc-2.15.so lib/x86_64-linux-gnu/libc.so.6

重启后问题解决了。

希望它能对你或其他人有所帮助。


我想补充一点:使用 fdisk 定位要挂载的分区。如果像我一样没有 BIOS 访问权限,则有一个解决方法 - 您可以使用 grub 引导 USB。在 Ubuntu 中: 在 grub 中按“c”。列出并将根切换到 USB(在我的情况下是 hd2)。如果您只遇到了访问 root 的问题,则也可以从 grub 中以 root 权限加载 bash。所以更多或更少地说,Linux 并不像人们认为的那么安全 :) - Daniel Hajduk

0

我想在@wilfo的回答中加入一些东西,因为我也遇到了同样的问题(意外删除lib.so.6,在启动时收到/sbin/init中缺少libc.so.6的消息)。 在Windows中创建liveUSB(使用UNetbootin等[http://unetbootin.sourceforge.net/])或在Ubuntu中按照@wilfo的建议操作。 从liveUSB引导,我选择了“体验Ubuntu而不安装它”,并且很高兴地应用了wilfo的方法,直到第6步,然后我找不到我的硬盘分区类型为ext3/4。所有都是nftf/fat/扩展格式。

所以我通过遵循这个链接恢复了之前的Ubuntu(那个缺少libc.so...的Ubuntu) https://help.ubuntu.com/community/Boot-Repair

确保按照所有必要的步骤进行操作,并备份您的Ubuntu分区。 您可以在/mnt/boot-sav/wubi1/home内看到您的先前的Ubuntu文件, 从这里备份到您的Windows分区/mnt/boot-sav/sda..., 并按照这里的剩余过程操作https://help.ubuntu.com/community/Boot-Repair


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接