IMPORTANTE: I moderni sistemi UEFI montano il firmware sotto /sys
directory e renderla disponibile al sistema operativo. NON eseguire questo comando su un sistema moderno poiché rimuoverà questo firmware, essenzialmente bloccando la tua macchina.
Lo scenario più semplice a cui riesco a pensare è qualcuno che vuole eliminare tutti i dati dal proprio disco. Ci possono essere ragioni perfettamente legittime per farlo e il modo più semplice a cui riesco a pensare è
rm -rf --no-preserve-root /
Si scopre che questo è effettivamente dato come esempio in info rm
:
`--no-preserve-root'
Do not treat `/' specially when removing recursively. This option
is not recommended unless you really want to remove all the files
on your computer.
Un altro motivo perfettamente valido è che vuoi eliminare un file system montato che hai chroot
-ed in. In tal caso, rm -rf --no-preserve-root /
eliminerà il sistema nel chroot
ambiente ma lascerà intatto il tuo.
Sono sicuro che ci sono più ragioni possibili, ma in generale sembra un approccio molto ragionevole che il mio sistema mi permetta di fare quello che voglio con esso. Il mio lavoro è stare attento, il sistema dovrebbe permettermi solo di fare quello che voglio che sia fatto. Se quello che voglio è stupido, è un problema mio e non del sistema operativo.
Ad ogni modo, questa è una restrizione relativamente nuova, è stata aggiunta nella settima versione della specifica POSIX (la precedente è qui), prima di quella rm -rf /
era un comando perfettamente valido. Su una nota storica, il .
e ..
le directory sono sempre state protette da rm
, sin dal 1979, quando rm
ha acquisito per la prima volta la possibilità di eliminare le directory. Ulteriori informazioni qui.
L'esistenza del --no-preserve-root
l'opzione non è aggiungere funzionalità aggiuntive ma da sovrascrivere una riduzione molto sensata della funzionalità. Questo passaggio è probabilmente basato sulla filosofia secondo cui il computer dovrebbe fare ciò che gli viene detto e che i comandi dovrebbero essere disponibili per esprimere qualsiasi azione desiderata. Questo passaggio è precedente a UEFI e, in base alla mia esperienza, dico che ora è obsoleto.
Nella pratica moderna, senza questa opzione, il rm
Il comando evita la cancellazione accidentale della directory root quando si utilizza una variabile non inizializzata o uno spazio vagante.
rm -rf /${my_directory}
rm -rf / var/log/httpd/*
Nota divertente:la protezione non era la sua intenzione. Secondo un blog di Sun Microsystems, rimuovendo /
directory rimuoverà implicitamente la directory di lavoro corrente, una violazione della considerazione speciale già fatta per il .
e ..
directory. Questo è il motivo per cui il loro comitato per gli standard ha consentito questa eccezione speciale, non per prevenire un incidente. Questa modifica è stata introdotta per la prima volta con Solaris 10 build 36.
http://archive.is/5lmc9