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