실수로 / usr 이름을 바꾼 후 이름을 바꾸려면 어떻게합니까?


62

실수로 디렉토리를 이름 /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_bakas의 이름을 바꾸는 방법이 /usr있습니까?


2
이것은 어느 OS입니까? sudo라이브러리 단계에 어떻게 도달 했는지 궁금합니다. 보통 /usr/bin/명령에 오류가 없어서 실패했을 것입니다. 또한 루트 비밀번호가 설정되어 있습니까?
muru

3
@muru 우분투입니다. 당신은 맞습니다, 나는 not found전에 새로운 경로 /usr_bak/bin를 추가 $PATH하고 지금 여기에 내 게시물에 오류가 발생에 대해 오류가 발생했습니다 ...
Yves

2
@ user1717828 복잡합니다. 우분투 16.04에서 개발 한 프로젝트를 우분투 17.10에서 컴파일해야합니다. 따라서 /usr우분투 16.04를 간단하게 복사하여 /usr우분투 17.10 을 덮어 쓸 수 있다면 ...
Yves

6
그러한 급격한 변화 대신 프로젝트를 컴파일하기 위해 VM을 사용하는 것을 고려해 보셨습니까?
Kevin

3
헤드리스 모드 에서 virtualbox를 실행할 수 있습니다 . 다른 컴퓨터에서 게스트를 설정하거나 미리 구성된 컴퓨터를 얻는 것이 가장 쉽습니다.
Kevin

답변:


109

당신은 루트 사용에 대한 암호를 설정 한 이후 subusybox우분투에 기본적으로 설치를. su필요한 모든 라이브러리가 있습니다 /lib. Busybox는 정적으로 링크 된 유틸리티 모음이므로 누락 된 라이브러리는 문제가되지 않습니다. 하다:

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

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

당신이 루트 암호가없는 경우, 당신은 아마 수 사용하여 여기에 질 '솔루션을 사용LD_LIBRARY_PATH 하거나 재부팅하고 부팅 할 수있는 GRUB 메뉴를 편집 (질이 sudo를 같이하여 setuid 바이너리 작동하지 않습니다 말한다) init=/bin/busybox커널 매개 변수 및 이동로를 다시 폴더.


73
실수로 이름을 바꾸지 마십시오 /lib.
sleblanc

5
LD_LIBRARY_PATHisuid 이후 sudo를 실행하는 데 도움이되지 않습니다 sudo. 라이브러리가 올바른 위치에 있지 않으면 sudo는 루트가 복구 할 때까지 작동하지 않습니다.
Gilles

3
유닉스의 옛 맛 (리눅스보다 훨씬 더 오래된 그)에 정적으로 링크 된 바이너리의 작은 컬렉션을 포함 : 역사적 메모를 @Yves /sbin시나리오 정확하게 그 종류를 : "내가 뭘 런타임 라이브러리가 주변에 곡예를 할 몇 가지 활동을 하지만, 여전히 파일을 조작해야합니다. " Busybox가 발명되기 전의 기본적으로 동일한 접근 방식입니다. (정적으로 연결된 바이너리는 디스크 공간을 차지하기 때문에이 방식으로 사용할 수있는 명령의 수는 매우 제한적입니다.)
Ti Strga

8
@Yves 이름을 바꾸면 /lib다음으로 재부팅해야 할 것입니다.init=/bin/busybox
muru

3
@Yves : 파일 시스템을 마운트 할 수있는 라이브 배포판을 사용하여 USB 스틱에서 부팅하면 모든 것을 고칠 수 있습니다. 무언가를 삭제하면 패키지 미러에서 교체 파일을 다운로드하더라도.
Peter Cordes

33

muru의 답변 외에도 :

  • 복구 부팅 USB 키를 사용하여 시스템을 복구했을 수 있습니다. 예를 들어 시스템이 데비안 또는 우분투 인 경우 복구 모드에서 설치 USB 키를 부팅하고 적절한 mountmv및을 수행하십시오 umount.

  • 더 쉽게 실수를 복구 할 수 있도록, 나는 일반적으로 여러 내장 명령과 정적 쉘을 설치 (특히 일부 cp, rm, mv-like 내장 매크로)와 같은 sash(가되어 패키지 데비안 & 우분투, 그리고도 가능 띠 - 3.8. 소스 형식의 tar.gz )와 init=/bin/sashGrub 으로 전달하여 부팅 합니다.

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


몇 가지 기본 제공 명령으로 정적 쉘을 설치하는 방법을 설명해 주시겠습니까? 매뉴얼이 있습니까?
Yves

1
데비안 또는 우분투 : apt-get install sash. 그러나 sash-3.8.tar.gz를 다운로드 하여 컴파일 할 수도 있습니다.
Basile Starynkevitch

나는 이와 같은 문제에 대한 맞춤형 grub 항목으로 hdd에 liveiso를 유지합니다. 복잡 할 필요는 그냥 라이브 운영 체제를 부팅하지 않고 자유롭게 파일을 조작 :)
FreeSoftwareServers

3

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

/ usr 또는 / lib가없는 채 지뢰밭으로 부팅하는 것보다 안전합니다.


1
USB / DVD 등이 필요없이 Grub / HDD에서 직접 ISO를 부팅 할 수 있습니다. 꽤 멋진 트릭 grub에는 콜백이 있습니다.
FreeSoftwareServers

0

나는 비슷한 문제가 발생하여 테스트 /usr/bin/usr/bin_bkp위해 이름 을 바꾼 다음 이름을 바꿀 수 없었습니다 (명령이 sudo표준 디렉토리에서를 찾지 못했기 때문에 /usr/bin). 그러면 /usr/bin_bkp수동으로 디렉토리로 갔습니다 (파일 관리자 사용) ) 및 마우스 오른쪽 버튼 클릭시 대부분의 기능 (이름 바꾸기 포함)이 비활성화됩니다.

그런 다음 다음 명령을 시도하고 문제를 해결했습니다.

$/usr/bin_bkp/sudo mv /usr/bin_bkp/ /usr/bin/

나는 현재 경로에서 sudo를 호출했고 효과가 있었지만 이제는 모든 것이 정상으로 돌아 왔습니다.

운영체제 : Xubuntu 14.04


-3

지금은이 권리를 시도하지 (내가 원하는 것 확실하지 않다), 그러나 그것은 것 같다 수 있습니다 한다고 자신에게 새를 만드는 작업을하는 등 "은 / usr" 하드 링크 에 (안 소프트 링크) 당신의 " / usr_bak, "/ usr_bak"삭제

ln /usr_bak /usr
rm /usr_bak

(함께 "LN"에 의해 생성 된 하드 링크 없이 파일 시스템의 "-s"인수가) 문제의 디렉토리에 USR 및 usr_bak 디렉토리가 동등하게 유효한 링크를 모두 확인해야합니다. "rm"은 제거하도록 요청한 하나의 링크 만 제거합니다. 내용에 대한 유효한 링크가 여전히 있으므로 "/ usr"의 나머지 링크를 통해 액세스 할 수 있어야합니다.


5
나는 리눅스 (또는 적어도 우분투)가 디렉토리에 대한 하드 링크를 허용하지 않는다는 인상을 받았다. 예 : askubuntu.com/questions/210741/…
Chris Bouchard

4
@Chris : 맞습니다. Linux는 디렉토리 하드 링크를 허용하지 않습니다 ( .및 이외 ..의 디렉토리의 링크 수는 첫 번째 수준 하위 디렉토리의 수를 나타냅니다). 또한 rm디렉토리에서 작동하지 않으므로을 사용해야 rmdir합니다. ( lnrm디렉토리에 대한 심볼릭 링크에서 작동하지만, 우리는 실제 디렉토리에 대해 얘기하고). 또한 에 대한 권한으로 인해 root처럼 필요하기 때문에 문제를 해결하지 못합니다mv/ . 이걸 실행할 수 있다면 mv보통 사람처럼 달릴 수 있습니다 .
Peter Cordes

2
재귀 파일 시스템 크롤링을 수행하는 소프트웨어가 무한 루프를 감지하기에는 너무 어렵 기 때문에 디렉토리에 대한 하드 링크는 대부분의 (모든?) Unics에서 지원되지 않습니다. 소프트웨어가 방문한 모든 inode를 추적하고 inode 인식 파일 시스템 (FAT32 / NTFS가 아님)을 크롤링하는 경우 가능하지만 심볼릭 링크를 확인하고 통과하지 않는 것이 훨씬 쉽습니다. 필요한 것은 파일 유형을 확인하기 위해 lstat (2)를 빠르게 호출하는 것입니다.
penguin359

2
@Pryftan, 내 ln(1)데비안에 대한 것은하여이 말한다 -d/ -F/ --directory옵션 : "수퍼 유저가 하드 링크 디렉토리를 시도 할 수 있습니다 (참고 : 아마 실패로 인해 시스템 제한, 심지어는 수퍼 유저 용)" . 따라서 자유롭게 시도해 볼 수 있지만 파일 시스템에서 허용되지 않을 수 있습니다.
Toby Speight

1
@TobySpeight 또 다른 생각 : symlink (7) 참조 : 하드 링크는 디렉토리를 참조하지 않을 수 있으며 (파일 시스템 트리 내에서 루프가 발생하지 않도록하여 많은 프로그램을 혼동시킬 수 있음) 다른 파일 시스템의 파일을 참조하지 않을 수 있습니다 (왜냐하면) inode 번호는 파일 시스템에서 고유하지 않습니다). 이것은 하드 링크 시도가 실제로 함수가 호출되었지만 디렉토리이기 때문에 정확히 실패하는 다른 것을 표현하는 방법 일 수 있다고 생각합니다 . (파일 시스템 참조는 내가 다른 의견에서 생각한 것입니다)
Pryftan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.