Cosa fa rm -rf
quando viene utilizzato per rimuovere file o directory?
Come funzionano le opzioni -r
e -f
insieme?
Cosa fa rm -rf
quando viene utilizzato per rimuovere file o directory?
Come funzionano le opzioni -r
e -f
insieme?
Risposte:
Il comando rm -rf
è lo stesso di rm -r -f
.
Dalla rm
pagina man (digitare man rm
un terminale per vederlo) -r
fa:
remove directories and their contents recursively
E -f
fa:
ignore nonexistent files and arguments, never prompt
Quindi in combinazione fanno entrambi.
Si prega di utilizzare questo comando con cura!
rm -rf /
eliminerà teoricamente ogni file sul tuo computer che risiede in una directory per la quale hai il permesso di scrivere. Se sei root, questo significa spazzare via l'intero sistema. (In pratica, non funziona perché GNU rm
ha un caso speciale che rifiuta di consentire a rm -r /
meno che non lo dica anche tu --no-preserve-root
.)
rm -rf /
a vedere se viene catturato correttamente.
Oltre alla precedente risposta corretta, vorrei insegnarti come pescare:
Quando non sei sicuro di come funzioni un comando, quali opzioni ha e cosa fa, apri un terminale e digita
man <command>
Per esempio:
man rm
Una volta lì, puoi cercare l'opzione. Una pagina man può essere davvero lunga da leggere, quindi nel tipo di terminale:
/<pattern>
Quindi, per esempio, facendo:
/-f
Puoi facilmente atterrare a:
-f, --force
ignore nonexistent files and arguments, never prompt
Per -r fare:
-r, -R, --recursive
remove directories and their contents recursively
È possibile spostarsi tra i risultati della ricerca utilizzando n
(successivo) e N
(precedente).
Se devi fare qualcosa, ma non conosci il nome del comando, usa apropos
per cercare nelle pagine man:
apropos <pattern>
Per esempio:
apropos directory listing
rm
è l'abbreviazione di remove. La r
bandiera è di rimuovere ricorsivamente le directory e i loro contenuti e la f
forza dei mezzi, e sostituisce qualsiasi richiesta di conferma.
r flag is to remove directories
non è giusto ... rimuove le directory insieme al suo contenuto, è un'operazione ricorsiva..secondo le tue parole, rimuove solo le directory, che dire dei sottodirectory, dei file sotto di essa? poiché la voce della directory contiene solo il mapping dell'inode del nome, questo non ha alcun senso.
Come già accennato, rm -rf <ARG>
si intende rimuovere forzatamente i file in modo ricorsivo, dove si <ARG>
trova una directory (anche se può essere un file giusto).
Il punto centrale della -r
(rimozione ricorsiva) è che rm
non è possibile rimuovere le directory se non sono vuote, semplicemente perché la chiamata di sistema sottostante che rm
utilizza ( scollega ) funziona solo su directory vuote. Quindi, ciò -r
che fa flag, è la ricerca approfondita che scende in directory e rimuove prima i file, e solo allora quando la directory è vuota - la rimuoverà. Lo stesso effetto si ottiene tramite il find
comando con -delete
flag (quando non si specifica il filtro per -type
, ma questa è un'altra storia).
Per quanto riguarda -f
, fa due cose: una impedisce di chiedere se si desidera rimuovere il file o meno (come quando si rimuove un file di proprietà di un altro utente all'interno della directory, non mostrerà la rm: remove write-protected regular empty file 'f1'?
richiesta di conferma) e ignora file inesistenti. Ad esempio, con un nome file inesistente, dovresti ricevere un rm: cannot remove 'nonexistent': No such file or directory
errore.
Guarda anche: