In questo breve tutorial impareremo come ripristinare o recuperare i comandi eliminati in Linux usando coreutils
e busybox
.
Di solito utilizziamo rm
comando per rimuovere roba in Linux, giusto? Sì. E se usiamo rm
a rm
rm
? In altre parole, cosa succede se rimuoviamo /bin/rm
file utilizzando rm
comando? Mi sono sempre chiesto cosa sarebbe successo se lo avessi effettivamente fatto su una macchina Linux. Quindi ho avviato rapidamente una VM Ubuntu ed ho eliminato il /bin/rm
file eseguendo il comando seguente:
$ sudo rm /bin/rm
Ho pensato di poter recuperare facilmente il rm
cancellato comando reinstallando Gnu coreutils
pacchetto, perché rm
il comando fa parte di coreutils
pacchetto, non è vero?
Quindi ho provato a reinstallare coreutils
pacchetto utilizzando apt
gestore di pacchetti come di seguito:
$ sudo apt install --reinstall coreutils
Oddio, mi sbagliavo! Il apt
il gestore dei pacchetti richiede rm
, quindi non può reinstallare coreutils
pacchetto.
Reading package lists... Done Building dependency tree Reading state information... Done 0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded. Need to get 1249 kB of archives. After this operation, 0 B of additional disk space will be used. Get:1 http://in.archive.ubuntu.com/ubuntu focal/main amd64 coreutils amd64 8.30-3ubuntu2 [1249 kB] Fetched 1249 kB in 2s (747 kB/s) dpkg: warning: 'rm' not found in PATH or not executable dpkg: error: 1 expected program not found in PATH or not executable Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin E: Sub-process /usr/bin/dpkg returned an error code (2)
Ho anche provato a compilarlo dal sorgente, ma non funziona nemmeno, perché il Makefile
usa rm
. Finora non sapevo che la reinstallazione non fosse possibile senza rm
comando.
Pensavo che ripristinare i comandi eliminati fosse banale. Tuttavia, in questo caso particolare non sono riuscito a ripristinare il rm
comando. Alla fine ho trovato la soluzione dopo un paio di ricerche sul web. Se hai rimosso accidentalmente rm
comando (spero che non lo farai), potresti utilizzare uno dei seguenti metodi per recuperarlo. Non solo rm
comando, puoi usare questa procedura per recuperare quasi tutti i comandi di base eliminati forniti da coreutils
pacchetto.
Disclaimer:
NON DEVI FARLO SU UN SISTEMA DI PRODUZIONE . È esclusivamente a scopo educativo!.
Recupera i comandi eliminati in Linux usando coreutils
Per chi non lo sapesse, Gnu coreutils
il pacchetto fornisce comandi di base essenziali come cat
, ls
, rm
, mkdir
, rmdir
, touch
, e tanti altri. Viene preinstallato con la maggior parte delle distribuzioni GNU/Linux.
Per recuperare il rm
cancellato comando, prima crea un file binario vuoto con nome "rm"
sotto /bin/
posizione:
$ sudo touch /bin/rm
Rendilo eseguibile:
$ sudo chmod +x /bin/rm
Scarica coreutils
pacchetto utilizzando il comando:
$ apt download coreutils
Tieni presente che non possiamo reinstallare coreutils
ma scaricalo. Inoltre, non è necessario utilizzare sudo
privilegi per scaricare un pacchetto.
Decomprimi il pacchetto scaricato con il seguente dpkg
comando:
$ sudo dpkg --unpack coreutils_8.30-3ubuntu2_amd64.deb
Il comando sopra semplicemente decomprime coreutils
pacchetto, ma non lo configurerà.
Fatto! Ora puoi iniziare a usare rm
comando. Per verificare se la funzionalità del rm
comando viene ripristinato, elimina semplicemente qualsiasi file indesiderato. Ad esempio, ho eliminato coreutils
pacchetto che ho scaricato in precedenza:
$ rm coreutils_8.30-3ubuntu2_amd64.deb
Grande! Funziona!
E, per favore, non farlo mai su un sistema di produzione!!
Ripristina i comandi eliminati utilizzando busybox in Linux
Casella occupata è una suite di software che fornisce molte utilità UNIX comuni in un unico piccolo eseguibile. Fornisce sostituzioni per la maggior parte delle utilità che di solito trovi in GNU fileutils, shellutils, ecc. È disponibile per impostazione predefinita in Debian e nei suoi derivati come Ubuntu e molte altre distribuzioni Linux.
Puoi visualizzare l'elenco delle principali utilità della riga di comando fornite da busybox
usando il comando:
$ busybox --list
Risultato di esempio:
[ [[ acpid adjtimex ar arch arp arping ash awk basename bc blkdiscard blockdev brctl bunzip2 busybox bzcat bzip2 cal cat [..]
Nel mio desktop Ubuntu 20.04 LTS, busybox fornisce circa 263 utilità della riga di comando.
Ora ripristiniamo il rm
cancellato comando creando temporaneamente un collegamento simbolico ad esso. Esegui il comando seguente per creare un collegamento simbolico temporaneo a /bin/rm
a /bin/busybox
:
$ ln -s busybox /bin/rm
Quindi reinstalla coreutils
pacchetto utilizzando il comando:
$ sudo apt install --reinstall coreutils
Questo è tutto. Il comando precedente ripristinerà rm
comando.
Come affermato in precedenza, questa procedura non serve solo per recuperare rm
comando. Immagino che possiamo recuperare quasi tutti i comandi Linux usando questi metodi. Controllalo tu stesso su una VM e vedi che funziona! Ancora una volta, non farlo in un sistema di produzione . Sei stato avvisato!
Leggi anche:
- Ripristina l'autorizzazione eseguibile per il comando Chmod in Linux
- Moreutils:una raccolta di utilità Unix più utili