실수로 /usr의 이름을 바꾼 후 어떻게 다시 이름을 바꾸나요?

실수로 /usr의 이름을 바꾼 후 어떻게 다시 이름을 바꾸나요?

/usr실수 로 디렉토리 이름을 /usr_bak.

나는 그것을 다시 변경하고 싶었기 때문에 시스템이 명령을 찾을 수 있도록 /usr_bak/bin경로 를 추가했습니다 .$PATHsudo

하지만 이제는 sudo mv /usr_bak /usr오류가 발생합니다.

sudo: error while loading shared libraries: libsudo_util.so.0: cannot open shared object file: No such file or directory

시스템을 다시 설치하는 것 외에 이름을 바꾸는 방법이 있습니까 /usr_bak?/usr

답변1

이미 루트 비밀번호를 설정했으므로 su우분투에 기본적으로 설치되어 있는 및 를 사용하세요. 필요한 busybox모든 su라이브러리가 있습니다 /lib. Busybox는 정적으로 링크된 유틸리티 모음이므로 라이브러리가 없어도 문제가 되지 않습니다. 하다:

su -c '/bin/busybox mv /usr_bak /usr'

(Busybox 자체에는 su작은 프로그램이 있지만 /bin/busybox바이너리는 setuid가 아니므로 루트로 실행하지 않으면 작동하지 않습니다.)

루트 비밀번호가 없다면 아마도Gilles의 솔루션을 사용하는 것이 여기에 사용됩니다.LD_LIBRARY_PATH또는 (Gilles는 이것이 sudo와 같은 setuid 바이너리에서는 작동하지 않는다고 말합니다) 재부팅하고 GRUB 메뉴를 편집하여 init=/bin/busybox커널 매개 변수로 부팅하고 폴더를 다시 이동합니다.

답변2

또한무루의 대답:

  • 시스템을 복구하는 데 사용할 수 있는 일부 복구 부팅 USB 키가 있습니다. 예를 들어 시스템이 Debian 또는 Ubuntu인 경우 복구 모드에서 설치 USB 플래시 드라이브를 부팅한 다음 적절한 mount작업을 수행합니다 .mvumount

  • 이러한 오류를 더 쉽게 수정할 수 있도록 일반적으로 여러 내장 명령(특히 cp, rm, - mv와 유사한 내장 명령 중 일부)이 포함된 정적 셸도 설치합니다.sash(이것은포장된Debian 및 Ubuntu에서는 다음으로도 사용 가능새시-3.8.tar.gz소스 코드 형식으로) 부팅되어 init=/bin/sashGrub에 전달됩니다.

추신: sash약간 버그가 있고 Posix와 완전히 호환되지는 않지만 여전히 매우 유용합니다.

답변3

가장 안전한 방법은 운영 체제(Debian, Ubuntu, Suse 등)를 부팅하는 USB, CD 또는 DVD를 사용하여 재부팅하는 것입니다. 그런 다음 문제가 있는 드라이브를 마운트하고 이름을 바꿉니다.

/usr 또는 /lib가 사실상 누락된 지뢰밭으로 부팅하는 것보다 안전합니다.

답변4

지금은 이것을 시도할 수 없지만(하고 싶은지 확실하지 않음) 다음과 같습니다.~해야 한다다음과 같이 새로운 "/usr"을 만들어 보십시오.하드 링크(소프트 링크 아님) "/usr_bak"로 이동하고 "/usr_bak"를 삭제하세요.

ln /usr_bak /usr
rm /usr_bak

"ln"에 의해 생성된 하드 링크(아니요파일 시스템의 "-s" 매개변수는 usr 및 usr_bak 디렉토리를 관련 디렉토리에 대한 동등하게 유효한 링크로 만들어야 합니다. "rm"은 제거를 요청한 링크 하나만 제거하며 둘 다 제거하지는 않습니다. 콘텐츠에 대한 유효한 링크가 아직 남아 있으므로 "/usr"에 있는 나머지 링크를 통해 액세스할 수 있습니다.

관련 정보