가능합니까?
글쎄, 대부분의 사소하고 중요한 유틸리티는에 설치되어 /bin
있으며 이제 모든 유틸리티에 대한 액세스 권한을 잃었습니다. 실제로 재부팅하면 시스템을 더 이상 부팅 할 수 없습니다.
어쨌든 우리는 문제를 해결하고 /bin
가능한 한 가깝게 내용을 만들 것입니다. 유일한 차이점은 우리가 고칠 일부 심볼릭 링크입니다.
어떻게?
먼저 chroot
깨진 시스템에 들어가야하지만 약간의 차이가 있습니다 ! 그런 /bin
다음 디렉토리에 설치된 파일이있는 시스템에 설치된 패키지 목록이 표시 되며 필요한 패키지 만 다운로드하여에 필요한 파일을 추출합니다 /bin
. 그런 다음 끝납니다.
예를 들어 after chroot
를 /bin
사용하면 다음 을 사용하여 파일을 설치 한 패키지 목록을 얻을 수 있습니다 .
dpkg --search /bin | cut -f1 -d: | tr ',' '\n'
그리고 우리는 또한 사용할 수 있습니다 :
dpkg --listfiles PACKAGE-NAME | grep "^/bin/" # or awk '$0 ~ "^/bin/
에서이 패키지별로 설치된 파일을 나열합니다 /bin
.
그런 다음 우리에게 필요한 모든 패키지 목록을 만든 다음 다운로드하여 다음과 같이 추출하십시오 /bin
.
xargs apt download < list-packages
dpkg-deb -x PACKAGE .
mv ./bin/* /bin
그러나 시스템에 설치된 모든 패키지를 확인하려면 스크립트를 사용해야합니다. 수동으로하는 것은 광기이기 때문입니다.
그래서 우리가 필요한 모든 것을하는 스크립트를 작성했습니다. 복원에 필요한 모든 패키지를 찾고 /bin
각 패키지의 이름과 관련 파일을 보여줍니다 /bin
. 스크린 샷은 다음과 같습니다.
마지막으로 모든 패키지를 다시 설치하거나 필요한 파일 만 다운로드하여 압축을 풉니 다 /bin
(권장 옵션).
이 스크립트의 사본을 가져 오거나 직접 다운로드 할 수 있습니다 .
시작하자
chroot
설치된 Ubuntu와 동일한 아키텍처를 가진 라이브 디스크로 시스템을 부팅하고 터미널을 열고 루트 액세스 권한을 얻습니다.
sudo -i
root
파일 시스템을 마운트하십시오 (나를 위해 /dev/sda1
).
mount /dev/sda1 /mnt
인터넷에 연결해야하므로 resolv.conf
라이브 우분투에서 마운트 된 루트 파티션으로 복사 하십시오.
cp /etc/resolv.conf /mnt/etc/resolv.conf
이제 스크립트를 마운트 된 파티션의 어딘가에 복사하십시오. 예 :
cp /media/ubuntu/usb/restore-bin.sh /mnt/restore-bin.sh
또는 다음 wget
과 같이 등을 사용하여 다운로드 할 수 있습니다 .
wget https://git.io/v9fRm -O /mnt/restore-bin.sh
다른 필요한 경로를 마운트하십시오.
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
그리고 여기에 사소한 차이점이 있습니다 . 디렉토리 chroot
가 없을 때 어떻게 깨진 시스템을 만들 /bin
수 있습니까? 어떤 쉘을 실행해야합니까?
따라서 임시 bin 디렉토리를 작성하십시오. 예 : bintmp
깨진 시스템 루트 내에서 이름 지정 :
mkdir /mnt/bintmp
그런 다음 라이브 /bin
를 그 안에 묶으십시오 .
mount --bind /bin /mnt/bintmp
/bintmp/bash
로그인 쉘로 설정하는 동안 시스템에 Chroot :
chroot /mnt /bintmp/bash
환경 변수 /bintmp
로를 내보내십시오 PATH
.
export PATH=/bintmp:$PATH
스크립트에 실행 비트를 제공하십시오.
chmod +x restore-bin.sh
스크립트를 실행하십시오.
./restore-bin.sh
검색이 완료 될 때까지 기다린 다음 스크린 샷에서 본 질문에 답변하십시오. 복구가 시작되고 /bin
거의 끝났습니다.
완료되면 CTRL+ D를 사용 하여 chroot
환경에서 벗어나 마운트 된 경로를 마운트 해제하십시오.
umount -R /mnt
시스템을 재부팅하십시오.
내에서 링크 복원 /bin
에 /bin
의해 관리되는 약 5 개의 심볼릭 링크를 제외하고 디렉토리 내의 거의 모든 파일 이 다시 돌아옵니다 update-alternatives
.
실행중인 시스템에서 다음을 실행하십시오.
sudo update-alternatives --all
몇 가지 질문을합니다. 당신은 단순히 ENTER그들 모두를 받아 들일 수 있습니다.
이제 끝났습니다.
/bin
에 우분투 단지 심볼릭 링크에/usr/bin
요즘? 그래서 당신이해야 할 일은 심볼릭 링크를 다시 넣는 것입니까?