재미로, Raspbian을 실행하는 Raspberry Pi에서이 명령을 사용한다고 생각했습니다.
sudo rm -f /bin/rm
나는 단지 다시 설치할 수 있다고 생각했다 coreutils
: 나는 틀렸다!
apt-get install --reinstall coreutils
dpkg
에서 패키지를 제거 할 수 없다는 오류가 발생 했습니다. 를 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-deb
Pi가 아닌 경우에도 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 패키지를 설치하십시오.이 패키지는 다른 모든 것을 깨뜨려도 작동합니다.