我更改了 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
如果您仍然有root
shell,您可以尝试再次将库复制回来。您将需要这个别名:
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 进行恢复。或者重新安装。