GNU/Linux >> Linux Esercitazione >  >> Linux

Esiste uno scenario in cui è necessario rm -rf -no-preserve-root?

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


Linux
  1. Linux:perché non è presente alcun file system Rootfs sul sistema?

  2. Mkdir ricorsivo?

  3. Dov'è .bashrc?

  4. Da dove posso trovare il codice sorgente del comando cp?

  5. Esiste un file system simile a git?

Non ci sono repository abilitati RHEL soluzione

Dove posso trovare la prima versione del sistema operativo Linux?

Dove posso trovare il codice sorgente della chiamata di sistema?

Qual è l'interfaccia per le chiamate di sistema ARM e dove è definita nel kernel Linux?

Dove è documentato l'ABI x86-64 System V?

Linux:dove mettere il file di scambio