/ bin / rm을 삭제했습니다. 어떻게 복구합니까? 나는 틀렸다! apt-get

재미로, Raspbian을 실행하는 Raspberry Pi에서이 명령을 사용한다고 생각했습니다.

sudo rm -f /bin/rm

나는 단지 다시 설치할 수 있다고 생각했다 coreutils: 나는 틀렸다!

apt-get install --reinstall coreutilsdpkg에서 패키지를 제거 할 수 없다는 오류가 발생 했습니다. 를 Makefile사용 하기 때문에 소스에서 컴파일이 작동하지 않습니다 rm.

rm다시 작업하려면 어떻게 해야합니까?



답변

sudo touch /bin/rm && sudo chmod +x /bin/rm
apt-get download coreutils
sudo dpkg --unpack coreutils*

그리고 다시는


apt-get과 함께 sudo를 사용하지 않은 이유는 무엇입니까?

때문에 download명령이 필요하지 않습니다 :

download
download는 주어진 바이너리 패키지를 현재 디렉토리 로 다운로드합니다 .

따라서 일부 디렉토리에 있지 않으면 쓸 수 없으며 사용할 필요가 없으며 sudo나중에 root패키지를 제거 / 이동할 수있는 권한 이 필요 하기 때문에 나중에 문제가 발생할 수 있습니다.


답변

debian그리고 그 파생어 (그리고 아마도 대부분의 다른 배포판)는와 함께 busybox사용됩니다 initramfs.

busybox 대부분의 핵심 명령 줄 유틸리티를 단일 실행 파일로 묶습니다.

일시적으로 심볼릭 링크 /bin/rm할 수 있습니다 /bin/busybox:

ln -s busybox /bin/rm

일하기 rm(그 후에는 할 수 있음 apt-get install --reinstall coreutils).

동일한 방법을 busybox포함 하는 다른 모든 유틸리티에 사용할 수 있습니다 . 이 목록은 배포마다 다릅니다. 로 목록을 얻을 수 있습니다 busybox --list.

그러나 해당 유틸리티의 제한된 버전입니다. 때로는 GNU 확장을 지원하지만 일반적으로 지원하지 않으며 일부는 모든 표준 / POSIX 기능도 지원하지 않습니다 (일부 기능은 컴파일 타임에 활성화 / 비활성화 할 수 있음).

또는 zsh의 내장 rm을 사용할 수 있습니다 .

#! /bin/zsh
zmodload zsh/files
rm "$@"

zsh/files모듈은 몇 가지 추가 내장 명령을 제공한다 ( rm, mv, ln, mkdir, rmdir, chown, chmod, sync). 이런 상황이나 더 많은 프로세스를 포크 할 수 없지만 대화식으로 zsh실행 하는 경우에 유용합니다 .

ksh93도하지만, 추가 / 옵션 명령의 buitin의 번호를 가지고 rm그들 가운데 ( basename, chmod, dirname, getconf, head, mkdir, logname, cat, cmp, cut, uname, wc, sync). 다음과 같이 호출 할 수 있습니다.

command /opt/ast/bin/the-command

A의 ksh93스크립트.


답변

재설치가 필요 없는 경우 apt-get또는 dpkg필요 rm하지 않은 경우 rm다음을 사용 rm하여 에뮬레이션 할 수 있습니다 perl.

cat > /bin/rm << "EOF"
#!/usr/bin/perl
foreach (@ARGV) { unlink $_ or warn "$@:$!"; }
EOF
chmod +x /bin/rm


답변

rm다른 컴퓨터에서 올바른 바이너리를 얻은 다음 scp또는를 사용하여 Pi에 복사하려고합니다. 이것은 scp이미 설치된 경우에만 작동합니다 …

scp사용할 수없는 경우 nc송신 측의 (일명 netcat) 및 /dev/tcp/HOST/PORT수신 측 의 리디렉션을 사용하는 bash도 작동 할 수 있습니다.

다른 Raspbian 머신이없는 경우 coreutils 패키지를 검색하고 ( .deb적절한 버전을 얻으려면 ) dpkg-debPi가 아닌 경우에도 Debian / Ubuntu / Mint /…로 압축을 풉니 다 .

dpkg-deb --fsys-tarfile coreutils*.deb | tar xf - ./bin/rm

dpkg가있는 다른 시스템이없는 경우 ar(binutils 개발 도구에서) tar를 사용하여 파일을 추출 할 수 있습니다 .

ar p coreutils*.deb data.tar.gz  | tar xzf - ./bin/rm


답변

데비안 (또는 우분투)이기 때문에 파일을 얻는 쉬운 방법이 있습니다.

mkdir /tmp/coreutils
sudo dpkg-deb --extract /var/cache/apt/archives/coreutils_ [tab complete for correct version].deb /tmp/coreutils
sudo cp /tmp/coreutils/bin/rm /bin

이것은 apt-get이 설치하기 전에 coreutils.deb를 다운로드했으며 dpkg-deb가 데비안 기반 시스템에 존재하기 때문에 작동합니다.

/ tmp로 직접 추출하지 않으면 상위 디렉토리에 대한 권한이 변경됩니다.

놀러 가려면 busybox-static 패키지를 설치하십시오.이 패키지는 다른 모든 것을 깨뜨려도 작동합니다.


답변