rm elimina file e cartelle dal terminale. È il comando più semplice da usare e il più rischioso della serie: non esiste nessun cestino, e ciò che cancelli non si recupera con un semplice "annulla". Vale la pena imparare bene come funziona, prima di usarlo con leggerezza.
Cos'è
rm è l'abbreviazione di remove, "rimuovi". Fa parte del pacchetto GNU coreutils ed è un eseguibile (/usr/bin/rm), presente su qualsiasi distribuzione GNU/Linux.
Cosa fa
Elimina i riferimenti ai file indicati: da quel momento il sistema considera libero lo spazio che occupavano. Non sposta i file in una cartella temporanea e non chiede conferma, a meno che tu non lo richieda con le opzioni giuste. Recuperare i dati dopo un rm è in generale difficile e non garantito, e richiede strumenti specifici e subito.
Per impostazione predefinita rm non elimina le directory: servono l'opzione -r oppure il comando rmdir.
Come si usa
Sintassi base:
$ rm [opzioni] file...Esempio 1: eliminare un file
$ ls
appunti.txt bozza.txt
$ rm bozza.txt
$ ls
appunti.txtIn caso di successo rm non stampa nulla, e il file è già sparito.
Esempio 2: eliminare più file
$ rm prova1.txt prova2.txt prova3.txt
$ rm *.tmpIl carattere jolly * viene espanso dalla shell in tutti i file che finiscono per .tmp. Prima di usarlo con rm, guarda cosa verrebbe cancellato, eseguendo lo stesso schema con ls:
$ ls *.tmp
cache.tmp vecchio.tmp
$ rm *.tmpEsempio 3: chiedere conferma con -i
$ rm -i appunti.txt
rm: rimuovere il file regolare 'appunti.txt'? nCon y il file viene eliminato, con n resta dov'è. È l'opzione giusta quando lavori in fretta o con nomi simili.
Esempio 4: eliminare una directory con -r
Senza -r, rm si rifiuta:
$ rm Vecchi
rm: impossibile rimuovere 'Vecchi': è una directory
$ rm -r VecchiL'opzione -r (recursive) elimina la directory e tutto ciò che contiene, sottocartelle comprese.
Esempio 5: eliminare solo directory vuote
Per le directory vuote c'è un comando dedicato, molto più sicuro, perché fallisce se la cartella contiene qualcosa:
$ rmdir Vuota
$ rmdir Piena
rmdir: rimozione di 'Piena' non riuscita: La directory non è vuotaAnche rm -d elimina le directory vuote.
Esempio 6: ignorare gli errori con -f
$ rm -f file_che_forse_non_esiste.txtL'opzione -f (force) non chiede conferme e non segnala errori se il file non esiste. Negli script si usa spesso per rendere un comando "ripetibile". Fa però anche un'altra cosa: elimina senza chiedere i file protetti da scrittura, per i quali rm normalmente chiederebbe conferma.
Esempio 7: vedere cosa viene eliminato con -v
$ rm -rv Vecchi
rimosso 'Vecchi/note.txt'
rimosso 'Vecchi/lista.txt'
rimossa la directory 'Vecchi'Esempio 8: una conferma sola con -I
Con -I (maiuscola) rm chiede conferma una volta sola, e solo se stai per eliminare più di tre file o una directory in modo ricorsivo. È meno fastidioso di -i e protegge comunque dalle distrazioni più gravi:
$ rm -I *.log
rm: rimuovere 5 argomenti? nEsempio 9: nomi con spazi o che iniziano con un trattino
I nomi con spazi vanno tra virgolette, altrimenti ogni parola viene trattata come un file diverso:
$ rm "Bozza articolo.txt"Un file il cui nome inizia con - verrebbe scambiato per un'opzione. Il doppio trattino -- indica che le opzioni sono finite:
$ rm -- -file_strano.txtEsempio 10: uso negli script, con una protezione
Questo script svuota una cartella di lavoro dai file temporanei:
#!/bin/bash
TMP="$HOME/lavoro_temp"
# se TMP fosse vuota, ${TMP:?} blocca lo script con un errore
rm -f "${TMP:?variabile non impostata}"/*.tmp
echo "Pulizia completata"La sintassi ${TMP:?messaggio} interrompe lo script se la variabile è vuota o non definita. Senza di essa, un comando come rm -rf "$TMP"/* con la variabile vuota diventerebbe rm -rf /*.
Opzioni utili
-i: chiede conferma per ogni file.-I: chiede conferma una volta sola per operazioni di una certa portata.-r/-R: elimina le directory e il loro contenuto.-f: non chiede conferme e ignora i file inesistenti.-d: elimina le directory vuote.-v: mostra ogni elemento eliminato.
Attenzione a
- Nessun cestino, nessun annulla: l'eliminazione è definitiva. Se vuoi una rete di sicurezza, sulle distribuzioni con desktop GNOME puoi usare
gio trash file, oppure installaretrash-clie usaretrash-put file: spostano il file nel cestino invece di cancellarlo. rm -rfè il comando più pericoloso: elimina ricorsivamente senza chiedere nulla. Controlla due volte il percorso prima di premere Invio.- Lo spazio di troppo:
rm -rf /home/enzo/Documentierm -rf /home/enzo /Documentisono comandi molto diversi. Nel secondo caso elimini l'intera home, e poi provi a eliminare/Documenti. - Variabili vuote: in uno script,
rm -rf "$DIR"/*conDIRnon impostata diventarm -rf /*. Proteggiti con${DIR:?}. - I caratteri jolly:
rm *elimina tutto nella directory corrente. Verifica sempre prima conpwddove sei e conlscosa c'è. - La protezione della radice: GNU
rmrifiuta di eseguirerm -rf /(opzione--preserve-root, attiva di default), ma non protegge da varianti comerm -rf /*. - Permessi: per eliminare un file serve il permesso di scrittura sulla directory che lo contiene, non sul file stesso.
- Non è una cancellazione sicura:
rmlibera lo spazio ma non sovrascrive i dati. Per eliminare in modo davvero irrecuperabile serve altro, e anche gli strumenti dedicati comeshrednon sono affidabili su SSD e file system con journaling.
Riepilogo
| Comando | Cosa fa |
|---|---|
rm file | Elimina un file |
rm -i file | Chiede conferma prima di eliminare |
rm -I *.log | Una sola conferma per operazioni estese |
rm -r dir | Elimina una directory e il contenuto |
rmdir dir | Elimina una directory solo se vuota |
rm -f file | Elimina senza chiedere e senza errori |
rm -v file | Mostra cosa viene eliminato |
gio trash file | Sposta nel cestino invece di cancellare |