원격 Ubuntu 서버에 루트로 로그인하고 거의 모든 바이너리를 삭제하는 동안 실수로 이 작업을 수행 했으며 rm /*
현재 파일을 복구하기 위해 ssh 또는 ftp를 통해 로그인할 수 없습니다(모든 것이 잘 진행되기를 바랍니다).
이 혼란스러운 상황을 어떻게든 해결할 수 있는 방법이 있습니까? 아니면 데이터 센터에 전화하여 형식에 대해 문의해야 합니까?
답변1
rm /*
아주 적은 양만 제거해야 합니다. 재귀적으로 무엇이든 삭제할 수 있는 플래그 가 없습니다 -r
. 이 플래그가 없으면 디렉터리는 삭제되지 않습니다(그리고 디렉터리가 삭제되더라도 빈 디렉터리만 삭제됩니다). 이 답변은 귀하가 실행 중이 아니라는 가정을 기반으로 합니다 rm -rf /*
.
루트 파일 시스템의 유일한 파일은 커널 및 initrd에 대한 심볼릭 링크(제가 보고 있는 Ubuntu 시스템에는 존재하지 않지만)이거나 /lib64
64비트 시스템의 심볼릭 링크일 수 있습니다.
문제는 단순히 심볼릭 /lib64 -> /lib
링크가 삭제되었기 때문일 수 있습니다. 그러나 거의 모든 프로그램이 이 심볼릭 링크에 의존하기 때문에 이는 매우 짜증나는 일입니다.
$ ldd /bin/bash
...
/lib64/ld-linux-x86-64.so.2 (0x00007f8946ab7000)
이것은 ld-linux
동적 로더이며, 사용할 수 없는 경우 동적 실행 파일을 실행할 수 없습니다. 이로 인해 로그인이 매우 어려워지거나 전혀 로그인하지 못할 수도 있습니다.
어쩌면 구세주가 있을지도 모릅니다 busybox
. 다음 명령을 실행하여 다음을 확인하세요.
$ ldd /bin/busybox
not a dynamic executable
이 경우 비지박스가 실행이 가능해야 하는데, 어떻게 실행하느냐가 문제입니다.
부트 로더 프롬프트에 액세스할 수 있는 경우 boot 를 사용할 수 있습니다. init=/bin/static-sh
여기서 static-sh는 심볼릭 링크입니다 busybox
( /bin/static-sh
존재하는지 확인하세요. 내 시스템에는 있지만 표준 Ubuntu는 아닙니다. 이 오류사용 가능함을 나타냅니다. )
루트 셸이 있으면 /lib64
기호 링크를 다시 만들 수 있습니다. 먼저 읽기/쓰기로 루트 파일 시스템을 다시 마운트해야 할 수도 있습니다. busybox에는 이러한 도구가 내장되어 있어야 하며 다음과 같이 실행할 수 있습니다.
# busybox mount -o remount,rw /
# busybox ln -s /lib /lib64
# /bin/bash
bash#
Bash가 작동하면 문제가 해결되어야 합니다.
답변2
현재 설치에서 파일을 복원해야 하는 경우 호스트에게 도움을 요청하세요. 가상 머신이라고 가정하면 디스크 이미지를 생성하고 호스트를 처음부터 다시 설치하고 이전 디스크 이미지를 새 파일 시스템에 덤프하는 데 하루에 약 5분 정도 걸립니다.
아무것도 필요하지 않으면 다시 설치하도록 하세요. 일을 세게 밀면 거의 항상 더 빠른 옵션이 됩니다.
답변3
방금 /lib에 대한 /lib64 심볼릭 링크를 제거했는데 콘솔이 아직 열려 있는 경우 다음을 수행하세요.
/lib/ld-linux-x86-64.so.2 /bin/ln -s /lib /lib64
그러면 정상적으로 다시 명령을 실행할 수 있게 됩니다. 실제 ld 라이브러리의 경로를 조정합니다. 원하는 다른 명령을 실행할 수도 있습니다. 명령 앞에 전체 ld 라이브러리 경로를 추가하면 됩니다.
답변4
물리적 서버에 액세스할 수 없다면 할 수 있는 일이 많지 않습니다.