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

아직 셸이 있는 경우 root라이브러리를 다시 복사해 볼 수 있습니다. 다음 별칭이 필요합니다.

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에서 복원해야 합니다. 아니면 다시 설치하세요.

관련 정보