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


27

Ho visto alcune domande qui dove le persone fanno accidentalmente rm -rf --no-preserve-rooto rm -rf *, cancellando la maggior parte o tutto il loro file system prima che possano reagire.

C'è mai un motivo per usarlo --no-preserve-root, sia nell'uso normale, come sviluppatore o come amministratore?


4
Non riesco a immaginare alcun caso utile ... Penso che questa opzione esista solo per ottenere l'ortogonalità del principio UNIX (in termini di mantenere le stesse cose senza eccezioni). Probabilmente vuoi l'eccezione in caso di /, ma il "caso generale" è ancora rappresentato. In altre parole: »Non è compito del mio computer dirmi cosa devo fare.« E non dovrebbe esserlo.
Andreas Wiese,

È lì come possibile arma da utilizzare quando SkyNet prende il sopravvento.
Mitch Dart,

Risposte:


26

IMPORTANTE: i moderni sistemi UEFI montano il firmware nella /sysdirectory e lo rendono disponibile al sistema operativo. NON eseguire questo comando su un sistema moderno poiché rimuoverà questo firmware, essenzialmente rovinando la macchina.


Lo scenario più semplice che mi viene in mente è 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 si desidera eliminare un file system montato in cui si è chrootinseriti. In tal caso, rm -rf --no-preserve-root /eliminerà il sistema chrootnell'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 tutto ciò che voglio con esso. Il mio compito è fare attenzione, il sistema dovrebbe permettermi solo di fare ciò che voglio. Se quello che voglio è stupido, questo è il mio problema e non quello del sistema operativo.

Comunque, questa è una restrizione relativamente nuova, è stata aggiunta nella settima versione della specifica POSIX (la precedente è qui), prima che rm -rf /fosse un comando perfettamente valido. Da un punto di vista storico, le directory .e ..sono sempre state protette rm, sin dal 1979, quando hanno rmacquisito per la prima volta la possibilità di eliminare le directory. Maggiori informazioni qui .


21
NON UTILIZZARE QUESTO PER ELIMINARE TUTTI I DATI SE IL TUO SISTEMA È UEFI (nuovi computer). In questo modo si eliminano tutte le variabili del firmware e si rende la scheda madre inutile come un mattone
Suici Doga

5
@SuiciDoga: fonte o ulteriore spiegazione? Il firmware della scheda madre non deve essere archiviato sull'HDD, altrimenti andrebbero persi se si strappava l'unità.
Tarka,

15
@Tarka: / sys / firmware / efi / efivars / potrebbe essere montato e l'eliminazione in modo ricorsivo potrebbe rimuovere quei vars. Non dovrebbe davvero mettere in mattoni un sistema, ma potrebbe. Vedi thenextweb.com/insider/2016/02/01/…
cianico

4
@Tarka non sono memorizzati sull'HDD e lo strappo dell'unità non li influenzerebbe. Tuttavia, per motivi che devo ancora capire, sono montati in modo che siano effettivamente accessibili in /.
terdon,

20
Il modo corretto di cancellare un'unità è riformattare le sue partizioni (o ripartizionarle del tutto). Non tutti i filesystem sono dischi rigidi, quindi l'uso di rm -rf /te potrebbe far svuotare una macchina remota sul supporto di qualcuno NFS / CIFS / SSHFS per esempio.
Score_Under

12

L'esistenza dello --no-preserve-rootswitch non consiste nell'aggiungere funzionalità aggiuntive, ma nel sostituire una riduzione sensata della funzionalità. Questo interruttore è probabilmente basato sulla filosofia secondo cui il computer dovrebbe fare ciò che viene detto e che i comandi dovrebbero essere disponibili per esprimere qualsiasi azione desiderata. Questo interruttore precede la UEFI e, in base alla mia esperienza, dico che ora è obsoleto.

Nella pratica moderna, senza questa opzione, il rmcomando evita la cancellazione accidentale della directory principale quando si utilizza una variabile non inizializzata o uno spazio randagio.

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

Nota divertente: la protezione non era la sua intenzione. Per un blog di Sun Microsystems, la rimozione della /directory rimuoverà implicitamente la directory di lavoro corrente, una violazione della considerazione speciale già presa per le directory .e ... Questo è il motivo per cui il loro comitato per le norme ha consentito questa speciale eccezione, non per prevenire un incidente. Questa modifica è stata introdotta per la prima volta con Solaris 10 build 36.

http://archive.is/5lmc9


Grazie per il link! Speravo che la parte storica sarebbe stata citata mentre mi chiedevo quale fosse il motivo del cambiamento.
Cameron Gagnon,

Informazioni aggiuntive interessanti - grazie
Marco

1

Forse questa non è una risposta che chi desidera originariamente richiede, ma esiste un caso d'uso che deve eliminare tutti i file in modo ricorsivo dalla directory principale. Sebbene non sia tramite il rmcomando, fa parte del processo switch_root (8) durante l'avvio del sistema Linux (non incorporato).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.