如何在不使用 ln 的情况下创建符号链接?

如何在不使用 ln 的情况下创建符号链接?

我删除了一个关键的符号链接 - 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 启动并在那里链接文件。

相关内容