휴지통 및 기타 폴더를 이동했습니다! 다시 돌려받는 방법? 루트에서 하위 폴더로 옮겼습니다.

실수로 모든 폴더를 루트에서 하위 폴더로 옮겼습니다. ( /bin, /etc, /home, /lib, /usr그들이 사용 된 이후, 이동되지 않은 유일한 사람 … 모든 이동)이다 /bak, /boot, /dev, /proc, /sys.

이제 내가 실행하려고하는 명령은 단순히 발생하지 않습니다. 나는 끊임없이 “그런 파일이나 디렉토리가 없다”고 생각합니다.

ssh와 ftp를 통해 연결되었지만 직접 SU 로그인이 비활성화되어 ftp를 통해 파일을 이동할 수 없습니다. 거기에서 직접 무언가를해야하는 경우에도 실제 서버에 액세스 할 수 있습니다.

/bin폴더 를 찾을 위치를 알려주기 위해 구성 파일을 편집해야하고 다시 액세스하는 데 도움이 될 것이라고 가정하지만 어떤 파일인지 또는 수행 방법을 알지 못합니다. chmod권한을 변경하기 위해 실행할 수도 없습니다 ).

다시 설치하는 것 외에 다른 방법이 있습니까?

CentOS의 이전 버전을 작업 중입니다.

나는 리눅스의 세계에 매우 익숙하기 때문에이 행동과 질문은 …



답변

여전히 루트 셸이 있으면 시스템을 복구 할 수 있습니다. 이제 당신은 모든 일반 디렉토리를 이동한다고 가정 해 봅시다 ( /bin, /etc, /lib, /sbin, /usr– 이러한 회복을 어렵게 만들 수있는 것들입니다)에서 /oops.

mv전체 경로를 지정하더라도 명령을 직접 실행할 수 없습니다 /oops/bin/mv. 동적으로 연결되어 있기 때문 mv입니다 . 디렉토리를 이동 했기 때문에 코드의 일부를 구성하는 라이브러리를 찾을 수 없으므로 실행할 수 없습니다. 사실, 그보다 더 나쁜 : 찾기 수 없습니다 동적 로더 (이름이 아키텍처와 유닉스 변종에 따라 달라질 수 있으며, 디렉토리 등의 다른 이름이 될 수 또는 ). 따라서 디렉토리를 다시 이동할 때까지 링커를 명시 적으로 호출하고 이동 된 라이브러리의 경로를 지정해야합니다. 다음은 데비안 스퀴즈 i386에서 테스트 한 명령입니다./libmvmv /lib/ld-linux.so.2/lib32/lib64/lib

export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /

다른 배포판이나 아키텍처에 대해서는 약간 조정해야 할 수도 있습니다. 예를 들어 x86_64의 CentOS의 경우 :

export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /

무언가를 망 쳤을 때 /lib정적으로 링크 된 도구 상자를 감싸는 데 도움이됩니다. 일부 배포판 (CentOS에 대해 모른다)은 정적으로 링크 된 Busybox 사본을 제공합니다 . 많은 명령이 내장 된 독립형 쉘인 sash 도 있습니다 . 이 중 하나가 있으면 복구를 수행 할 수 있습니다. 사실 전에 설치하지 않은 경우 너무 늦습니다.

# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit

더 이상 루트 셸이 없지만 SSH 데몬이 수신 대기 중이고 ssh를 통해 루트로 직접 로그인 할 수 있으며 이러한 정적으로 링크 된 도구 상자 중 하나가있는 경우 ssh를 입력 할 수 있습니다. 당신이 이동 한 경우에 사용할 수 있습니다 /lib/bin있지만 /etc.

ssh root@broken.example.com /oops/bin/sash
root@broken.example.com's password:
Stand-alone shell (version 3.7)
> -mv /oops/* /

일부 관리자는 정적으로 연결된 셸을 사용하여 대체 계정을 설정하거나 이러한 종류의 문제에 대해서만 루트 계정을 정적으로 연결된 셸을 사용하도록합니다.

루트 셸이없고 예방 조치를 취하지 않은 경우 Linux 라이브 CD / USB로 부팅해야합니다 (최근 디스크와 파일 시스템에 액세스 할 수있을 정도로 오래 지속되는 경우). 파일을 다시 이동하십시오.


답변

재부팅하지 않고 복구 할 수 있으므로 부팅되지 않으므로 다른 작업을 시도 할 때까지 재부팅하지 마십시오. 여전히 SSH 세션이 열려 있으면 다음을 시도하십시오.

  • 프로그램이 실행되는 위치는 $ PATH 변수를 사용하여 설정됩니다. 를 실행하여 경로에 새 빈 위치를 추가 할 수 있습니다 export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin". 해당 sbin 디렉토리도 추가해야 할 수도 있습니다. 전체 경로 /path/to/mv [from] [to]를 통해 프로그램을 수동으로 실행할 수도 있습니다. 예를 들어 mv가 다른 위치에 있더라도 작동해야합니다. 까다로운 부분은 대부분의 명령이 공통 라이브러리에 액세스하기를 원하고 /lib이동되었다는 것이므로 해당 위치에 변수를 설정해야합니다.export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/newpath/to/lib/:/newpath/to/usr/lib

  • 몇 가지 기본 명령을 실행할 수 있으면 다시 이동하십시오! mv /path/to/subfolder/* /순서대로 될 것입니다! 모든 것이 제자리에 돌아 오면 시스템은 정상적으로 작동해야합니다.

실패하면 모든 LiveCD를 부팅하고 드라이브를 마운트하면 폴더가 속한 곳으로 폴더를 다시 이동할 수 있습니다. distros livecd를 다시 설치하거나 사용할 필요가 없습니다. 드라이브를 마운트하고 폴더를 디스크의 올바른 위치로 다시 옮기기 만하면됩니다. 많은 리눅스 기반 복구 디스크는 이러한 종류의 복구를 수행하는 몇 가지 기본 콘솔 도구를 제공합니다.


답변

단일 사용자 모드에서 설치 CD를 사용하여 컴퓨터를 재부팅하고 루트 파일 시스템을 마운트 한 후 Linux에서 파일을 다시 이동할 수 있어야합니다. 나는 많은 centos를 알지 못하지만 RHEL과 비슷하므로 이것이 효과가 있습니다.


답변

5 년이 지난 후에 Gilles에게 많은 감사를 표하며 게시물이 일주일이 아니라면 여전히 내 하루를 구했습니다.

나는 현재 폴더에 대신의 하위 폴더의 내용을 이동하기위한 것 mv sub/* ., 내가 한 mv sub /* .내가 현재 폴더에 모든 것을 이동 있도록. 운 좋게도이 답변을 찾았으며 비교적 쉽게 내 컴퓨터를 수정할 수있었습니다. 그러나 우분투 16.04를 실행하는 x86_64 컴퓨터에서 작업 중이므로 명령을 약간 조정해야했습니다. 누군가 어려움을 겪고있는 경우 여기에 지침을 남기고 싶습니다.

export LD_LIBRARY_PATH=/oops/lib:/oops/lib/x86_64-linux-gnu
/oops/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /


답변

최신 시스템 (유닉스를 실행하는 x86_64 시스템)에 Ktipr의 답변 을 적용한 후 수행 할 명령을 몇 개 더 추가하고 싶습니다.
오류가 표시된 것처럼 mv로 디렉토리 “etc”를 가져올 수 없었습니다.

Error : Directory not empty

그래서 나는 사용해야했다

rsync -a source_file target_location

모든 것을 순서대로 되돌릴 수있었습니다. 아직 설치하지 않은 경우 먼저 설치해야합니다.


답변