Aus Spaß dachte ich, ich würde diesen Befehl auf meinem Raspberry Pi verwenden, auf dem Raspbian ausgeführt wird:
sudo rm -f /bin/rm
Ich dachte, ich könnte einfach neu installieren coreutils
: Ich habe mich geirrt!
apt-get install --reinstall coreutils
gibt einen Fehler aus dpkg
, der besagt, dass das Paket nicht entfernt werden konnte. Das Kompilieren aus dem Quellcode funktioniert nicht, da die Makefile
Verwendung rm
.
Wie kann ich eine Arbeit rm
zurückbekommen?
command-line
rm
dpkg
user60684
quelle
quelle
ln -s /usr/lib/initramfs-tools/bin/busybox /bin/rm
(oder/bin/busybox
, oder extrahieren Sie es aus einem initrd)Antworten:
Und niemals wieder.
Weil der
download
Befehl es nicht erfordert:Wenn Sie sich also nicht in einem Verzeichnis befinden, das Sie nicht schreiben können, müssen Sie es nicht verwenden
sudo
, und es könnte später problematisch werden, da Sieroot
Berechtigungen zum Entfernen / Verschieben des Pakets benötigen .quelle
/bin/sh
. Es wäre einfacher gewesen, eine Arbeit zu habensudo ln -s true /bin/rm
oder noch besser .sudo ln -s busybox /bin/rm
rm
apt-get
benötigt sudo, wenn Sie coreutils nicht heruntergeladen haben, da es sonst nicht in der Lage ist, dahin zu schreiben,/var
wo debian die heruntergeladenen Dateien speichert.apt-get
lädt das Paket in das aktuelle Verzeichnis immer (ja, auch wenn Sie verwendetsudo
), so , wenn Sie in einem Verzeichnis befinden , können Sie nicht als Benutzer schreiben Sie nicht benötigensudo
. Bitte überprüfen Sie die Manpages.debian
und seine Derivate (und wahrscheinlich die meisten anderen Distributionen), mitbusybox
denen in der verwendet wirdinitramfs
.busybox
bündelt die meisten zentralen Befehlszeilendienstprogramme in einer einzigen ausführbaren Datei.Sie können vorübergehend einen Symlink erstellen
/bin/rm
zu/bin/busybox
:Um eine Arbeit zu bekommen
rm
(danach kannst du deine machenapt-get install --reinstall coreutils
).Dieselbe Methode kann für alle anderen enthaltenen Dienstprogramme verwendet werden
busybox
. Diese Liste ist von Bereitstellung zu Bereitstellung unterschiedlich. Die Liste erhalten Sie mitbusybox --list
.Beachten Sie jedoch, dass es sich um eingeschränkte Versionen der entsprechenden Dienstprogramme handelt. Sie unterstützen manchmal GNU-Erweiterungen, aber im Allgemeinen nicht und einige von ihnen unterstützen nicht einmal alle Standard- / POSIX-Funktionen (einige Funktionen können zur Kompilierungszeit aktiviert / deaktiviert werden).
Alternativ können Sie auch
zsh
das eingebaute rm verwenden:Das
zsh/files
Modul stellt mit einigen zusätzlichen eingebauten Befehlen (rm
,mv
,ln
,mkdir
,rmdir
,chown
,chmod
,sync
). Dies ist in solchen Situationen hilfreich, oder wenn Sie keine weiteren Prozesse verzweigen können, aber eine interaktivezsh
Ausführung haben.ksh93
hat auch eine Reihe von zusätzlichen / optionalen Befehlen buitin, aber nichtrm
unter ihnen (basename
,chmod
,dirname
,getconf
,head
,mkdir
,logname
,cat
,cmp
,cut
,uname
,wc
,sync
). Sie können sie aufrufen mit:in einem
ksh93
Skript.quelle
rm
überhaupt neu installieren muss . ;-)Für den Fall ,
apt-get
oderdpkg
Bedürfnisserm
und ohnerm
eine Neuinstallation nicht posssible ist, dann können Sie emulierenrm
mitperl
:quelle
-r
und die Tatsache, dass kein korrekter Beendigungsstatus zurückgegeben wird, zu Problemen führen kann.apt-get install --reinstall coreutils
, das OP wieder normal zu machen.rm
mitmv
(zu "Papierkorb")Ich würde versuchen, die richtige
rm
Binärdatei von einem anderen Computer zu erhalten und dannscp
oder etwas zu verwenden, um es auf den Pi zu kopieren. Dies funktioniert natürlich nur, wennscp
bereits installiert ist ...Ist dies
scp
nicht dernc
Fall,/dev/tcp/HOST/PORT
funktionieren möglicherweise auch Netcat auf der sendenden Seite und Bash mit einer Umleitung auf der empfangenden Seite.Wenn Sie keine andere Raspbian-Maschine haben, können Sie das Paket coreutils abrufen (die
.deb
für die richtige Version) und mitdpkg-deb
(unter Debian / Ubuntu / Mint /… ) entpacken , auch wenn es nicht auf einem Pi installiert ist:Wenn Sie keine andere Maschine mit dpkg haben, können Sie die Datei mit
ar
(aus den binutils-Entwicklungstools) und tar extrahieren :quelle
scp
nicht verfügbar ist, funktioniertnc
(auch bekannt alsnetcat
) auf der sendenden Seite undbash
mit einer/dev/tcp/HOST/PORT
Umleitung auf der empfangenden Seite möglicherweise auch.Da es sich um Debian (oder Ubuntu) handelt, gibt es eine einfache Möglichkeit, die Dateien abzurufen:
Dies funktioniert, weil apt-get die Datei coreutils.deb heruntergeladen hat, bevor versucht wurde, sie zu installieren, und dpkg-deb garantiert auf einem Debian-basierten System vorhanden ist.
Extrahieren Sie nicht direkt nach / tmp, da dadurch die Berechtigungen für das übergeordnete Verzeichnis geändert werden.
Wenn Sie herumspielen wollen, möchten Sie vielleicht das Paket busybox-static installieren, das auch dann funktioniert, wenn Sie alles andere kaputt machen.
quelle