Cosa fa rm -rf?


25

Cosa fa rm -rfquando viene utilizzato per rimuovere file o directory?

Come funzionano le opzioni -re -finsieme?



16
@DanDascalescu Perché è banalmente risposto leggendo la pagina man, che dovrebbe essere la prima porta di chiamata di chiunque a rispondere a una domanda come questa.
David Richerby,

9
Provalo e vedi. (Spoiler: no.)
imallett,

3
Di Golly! Questa domanda deve essere uno scherzo di DevRobot! Come hai potuto arrivare al tuo livello di karma senza mai consultare le pagine man. Ora ... sei umano ?!
Cbhihe,

2
Sembra totalmente uno scherzo davvero. Come se qualcuno cercasse di chiedere: "la pioggia è fatta di H2O?" (Una buona risposta sarebbe: normalmente sì, ma in futuro, una volta che l'uomo sarà stato distrutto metà della flora della Terra, il 50% di essa si trasformerà in acido (come nelle piogge acide))
syntaxerror

Risposte:


52

Il comando rm -rfè lo stesso di rm -r -f.

Dalla rmpagina man (digitare man rmun terminale per vederlo) -rfa:

remove directories and their contents recursively

E -ffa:

ignore nonexistent files and arguments, never prompt

Quindi in combinazione fanno entrambi.

In realtà è un comando molto pericoloso perché rimuoverà in modo ricorsivo tutto all'interno della directory scelta (o rimuoverà semplicemente il file scelto) e lo farà senza mai chiederti.

Si prega di utilizzare questo comando con cura!


@Paul, cosa farebbe la barra? Uso questo comando per rimuovere spesso dirs e senza barra.
Polpo,

1
@Octopus, la barra da sola indica la directory principale. 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 rmha un caso speciale che rifiuta di consentire a rm -r /meno che non lo dica anche tu --no-preserve-root.)
cjm

10
Tuttavia, non consiglio di provare rm -rf /a vedere se viene catturato correttamente.
cjm,

2
@mattburnett È pericoloso anche in una VM: potresti avere supporti non locali per la VM. In particolare, credo che sia abbastanza comune montare una delle directory della macchina host sulla VM per condividere file tra l'host e la VM.
hvd,

1
@mattburnett I have VMs. Non ho una VM in quarantena. Non eseguo eseguibili sconosciuti. :)
hvd,

22

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).

Bonus:

Se devi fare qualcosa, ma non conosci il nome del comando, usa aproposper cercare nelle pagine man:

apropos <pattern>

Per esempio:

apropos directory listing

8

rmè l'abbreviazione di remove. La rbandiera è di rimuovere ricorsivamente le directory e i loro contenuti e la fforza dei mezzi, e sostituisce qualsiasi richiesta di conferma.


3
A rigor di termini 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.
heemayl

Hai ragione, modificherò la mia risposta.
Chris,

1
-r rimuove ricorsivamente le directory e i loro contenuti .
Jim Balter,

3

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 rmnon è possibile rimuovere le directory se non sono vuote, semplicemente perché la chiamata di sistema sottostante che rmutilizza ( scollega ) funziona solo su directory vuote. Quindi, ciò -rche 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 findcomando con -deleteflag (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 directoryerrore.

Guarda anche:

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.