Dla zabawy pomyślałem, że użyję tego polecenia na moim Raspberry Pi z systemem Raspbian:
sudo rm -f /bin/rm
Myślałem, że mogę po prostu ponownie zainstalować coreutils
: Myliłem się!
apt-get install --reinstall coreutils
podaje błąd z informacją dpkg
, że nie można usunąć pakietu. Kompilacja ze źródła nie działa, ponieważ Makefile
używa rm
.
Jak mogę odzyskać pracę rm
?
command-line
rm
dpkg
użytkownik60684
źródło
źródło
ln -s /usr/lib/initramfs-tools/bin/busybox /bin/rm
(lub/bin/busybox
wyodrębnij go z initrd)Odpowiedzi:
I nigdy więcej.
Ponieważ
download
polecenie tego nie wymaga:Tak więc, chyba że znajdujesz się w jakimś katalogu, w którym nie możesz pisać, nie musisz go używać
sudo
, a może to stać się problematyczne później, ponieważ będziesz potrzebowaćroot
uprawnień do usunięcia / przeniesienia pakietu.źródło
/bin/sh
. Byłoby łatwiej zrobić asudo ln -s true /bin/rm
nawet lepiejsudo ln -s busybox /bin/rm
mieć pracęrm
.apt-get
potrzebuje sudo, jeśli nie pobrałeś coreutils, ponieważ w przeciwnym razie nie będzie mógł pisać w/var
miejscu, w którym debian zapisuje pobrane pliki.apt-get
pobiera pakiet do bieżącego katalogu zawsze (tak, nawet jeśli używanesudo
), więc jeśli jesteś w katalogu nie można zapisać jako użytkownik nie trzebasudo
. Sprawdź strony podręcznika.debian
i jego pochodne (i prawdopodobnie większość innych dystrybucji) pochodzą z tego,busybox
co jest używane winitramfs
.busybox
łączy większość podstawowych narzędzi wiersza poleceń w jednym pliku wykonywalnym.Możesz tymczasowo utworzyć dowiązanie symboliczne
/bin/rm
do/bin/busybox
:Aby uzyskać pracę
rm
(po której możesz zrobićapt-get install --reinstall coreutils
).Tej samej metody można użyć do wszystkich innych narzędzi, które
busybox
obejmuje. Ta lista różni się w zależności od wdrożenia. Możesz uzyskać listę za pomocąbusybox --list
.Należy jednak pamiętać, że są to ograniczone wersje odpowiednich narzędzi. Czasami obsługują rozszerzenia GNU, ale generalnie nie, a niektóre z nich nawet nie obsługują wszystkich standardowych funkcji / POSIX (niektóre funkcje można włączyć / wyłączyć w czasie kompilacji).
Alternatywnie możesz użyć
zsh
wbudowanego rm:zsh/files
Moduł zawiera z kilku dodatkowych poleceń wbudowanych (rm
,mv
,ln
,mkdir
,rmdir
,chown
,chmod
,sync
). Jest to przydatne w takiej sytuacji lub gdy nie można rozwidlić większej liczby procesów, alezsh
działa się interaktywnie .ksh93
posiada również szereg dodatkowych poleceń buitin / opcjonalny, ale nierm
między nimi (basename
,chmod
,dirname
,getconf
,head
,mkdir
,logname
,cat
,cmp
,cut
,uname
,wc
,sync
). Możesz je wywoływać za pomocą:w
ksh93
skrypcie.źródło
rm
w ogóle ponownie instalować prawdziwy . ;-)W przypadku potrzeby
apt-get
lub bez ponownej instalacji nie jest możliwe, możesz emulować za pomocą :dpkg
rm
rm
rm
perl
źródło
-r
, a fakt, że nie zwraca poprawnego statusu wyjścia, może powodować problemy.apt-get install --reinstall coreutils
i przywrócić OP do normy.rm
pomocąmv
(do „kosza na śmieci”)Spróbowałbym uzyskać poprawny
rm
plik binarny z innej maszyny, a następnie użyćscp
lub czegoś takiego, aby skopiować go do Pi. To oczywiście działa tylko wtedy, gdyscp
jest już zainstalowane ...Jeśli
scp
nie jest dostępny, tonc
(aka netcat) po stronie wysyłającej i bash z/dev/tcp/HOST/PORT
przekierowaniem po stronie odbierającej mogą również działać.Jeśli nie masz innej maszyny Raspbian, możesz pobrać pakiet coreutils (uzyskać
.deb
odpowiednią wersję) i rozpakować go za pomocądpkg-deb
(na Debian / Ubuntu / Mint /…, nawet jeśli nie jest to Pi):Jeśli nie masz innej maszyny z dpkg, możesz wyodrębnić plik za pomocą
ar
(z narzędzi programistycznych binutils) i tar:źródło
scp
nie jest dostępny, a następnienc
(akanetcat
) po stronie wysyłającej ibash
z/dev/tcp/HOST/PORT
przekierowaniem na stronie odbiorczej może pracować jako dobrze.Ponieważ jest to debian (lub ubuntu), istnieje prosty sposób na uzyskanie plików:
Działa to, ponieważ apt-get pobrał plik coreutils.deb przed próbą jego instalacji, a dpkg-deb gwarantuje, że istnieje w systemie opartym na Debianie.
Nie wypakowuj bezpośrednio do / tmp, zmienia to uprawnienia do katalogu nadrzędnego.
Jeśli zamierzasz się pobawić, możesz zainstalować pakiet busybox-static, który działa, nawet jeśli zepsujesz wszystko inne.
źródło