我删除了一个关键的符号链接 - libc.so.6
。我有它应该指向的文件,但由于缺少链接,诸如ln
或 之类的基本命令wget
将不再起作用。但是,echo
或其他 Bash 内置命令可以工作。
我正在寻找一种方法来重新创建这个符号链接。
答案1
您可以使用 ldconfig,它会重新创建符号链接:
# rm /lib/libc.so.6
rm: remove symbolic link `/lib/libc.so.6'? y
# ls -l /lib/libc*
ls: error while loading shared libraries: libc.so.6: cannot open shared object file:
# ldconfig
# ls -l /lib/libc*
[skip]
lrwxrwxrwx. 1 root root 12 May 11 07:59 /lib/libc.so.6 -> libc-2.12.so
刚刚测试了一下,如您所见。
答案2
CentOS 6 通常附带busybox
,一组静态链接的 Unix 工具,安装在 中/sbin
。您可以像这样运行它:
/sbin/busybox ln -s libc-2.12.so /lib/libc.so.6
答案3
设置 LD_PRELOAD 以预加载相关库。我尝试使用 libpthread,似乎有效:
root@spirit:~# mv /lib/x86_64-linux-gnu/libpthread.so.0 /lib/x86_64-linux-gnu/libpthread.so.0-bak
root@spirit:~# chattr
chattr: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory
root@spirit:~# LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0-bak chattr
Usage: chattr [-RVf] [-+=AaCcDdeijsSu] [-v version] files...
答案4
您可以设置LD_LIBRARY_PATH
变量来包含实际所在的目录libc.so.6
:
export LD_LIBRARY_PATH="/dir/for/libc.so.6/:$LD_LIBRARY_PATH"
另外,执行命令ldconfig
以重新创建链接。这应该会使命令起作用,然后您可以使用ln
命令来修复系统。
另一种方法是通过 LiveCD 启动并在那里链接文件。