如何修复LD_PRELOAD?

如何修复LD_PRELOAD?

我更改了 LD_PRELOAD,现在我无法执行任何操作,例如连接到 SSH 或使用 ls、cp、mv 等,它向我显示:

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

我所做的,我将以下文件从 移至/lib/x86_64-linux-gnu/root然后编写了以下内容:

LD_PRELOAD=/root/libc-2.19.so:/root/libdl-2.19.so:/root/libm-2.19.so:/root/libpthread-2.19.so:/root/librt-2.19.so bash

但现在,我无法撤销我的工作,知道吗?

答案1

您缺少部分库。例如,在您的第一条错误消息中,ls需要librt.so.1.它可以将其视为符号链接,但您已将符号链接的目标移入,/root因此失败。以下是您应该具备的示例:

ls -l /lib/x86_64-linux-gnu/librt*
-rw-r--r-- 1 root root 31744 Dec  4  2016 /lib/x86_64-linux-gnu/librt-2.24.so
lrwxrwxrwx 1 root root    13 Dec  4  2016 /lib/x86_64-linux-gnu/librt.so.1 -> librt-2.24.so

如果您仍然有rootshell,您可以尝试再次将库复制回来。您将需要这个别名:

mcp() { src="$1" dst="$2"; test -f "$src" || return 1; while :; do read -N 10240 -r data; test -z "$data" && break; echo -n "$data"; done <"$src" >"$dst"; }

以下是您尝试修复的方法:

cd /root
for lib in lib*.so; do mcp "$lib" /lib/x86_64-linux-gnu/"$lib"; done

取消设置LD_PRELOAD并查看是否已恢复。

否则,您将需要从救援 CD 进行恢复。或者重新安装。

相关内容