Solo 'rm -rf' cancella qualche file?


16

Di recente ho corso rm -rf, no rm -rf /, ma non è successo niente. Ho appena ottenuto un risultato come questo:

terminale

Avevo paura perché temevo che avrebbe potuto eliminare alcuni file, ma non lo fece. Basta essere sicuri, questo avrebbe potuto eliminare qualsiasi file dalla mia directory?


36
Se non sei sicuro (certo 100%), non eseguire un comando.
Solar Mike,

5
Non digitare mai comandi che non capisci. Tutto ciò di cui avevi bisogno era a. o a / e eliminerai MOLTE cose.
Nelson,

18
Se vuoi sperimentare comandi potenzialmente pericolosi, considera l'installazione di una macchina virtuale.
musicman523

6
Sperimenta tutto ciò che desideri (a condizione che venga eseguito il backup sicuro dei dati). È solo un software e puoi sempre reinstallarlo se qualcosa va storto. Non permettere a nessuno di addestrarti ad avere paura del computer.
Hobbs

3
Esegui assolutamente un comando se non sei sicuro al 100%. Ci sono solo tanti modi per imparare, ed effettivamente eseguirli è uno di questi. Caveat emptor e, ovviamente, hanno dei backup e usano le VM e tutto il resto. Ma non finire nulla per paura farà poco per aiutarti a crescere. Dovrebbe essere ovvio quando fare molta attenzione (cioè rm), ma per molti / la maggior parte degli altri comandi, ad esempio tutti i comandi di manipolazione del testo basati su pipe, solo provarli spesso è il più semplice / semplice che puoi fare. Insieme allo studio della pagina man, ovviamente.
AnoE

Risposte:


49

No, rm -rfnon eliminerà alcun file perché non hai fornito un argomento al comando.


5
E a causa di -f, non è un errore eseguirlo senza argomenti. rm -rsi lamenterà di "operando mancante", ma lo -fsopprimerà e inoltre eliminerà gli errori per i file che non esistono. (Quindi ad esempio uno script potrebbe utilizzare rm -rf /foo/bar/*per svuotare una directory che potrebbe essere già vuota, senza dover 2>/dev/nulleliminare gli errori.)
Peter Cordes

34

Dalla pagina del manuale :

rm rimuove ogni file specificato.

Ciò significa che puoi usarlo per rimuovere un elenco di file contemporaneamente, ad es. Con

rm -rf test1.txt test2.txt

Fortunatamente, tutto ciò che hai fatto è stato passare un elenco vuoto di file, quindi non ha eliminato nulla. Inoltre, cosa dice @SolarMike : se non sai cosa fa un comando, non eseguirlo . macOS è progettato per 'nascondere' tutte le operazioni Unix pericolose (ma potenzialmente potenti) dell'utente finale.


7
Cordiali saluti la -rbandiera non è necessaria a meno che non si stiano eliminando ricorsivamente le directory. Se sono solo file, rmè sufficiente - -fè per forza, non ti chiede "sei sicuro" per ogni file.
Tim S.

9
Inoltre, -f porta al messaggio di utilizzo che non viene visualizzato quando lo si utilizza in modo errato. Questo è il motivo per cui non vi è stato alcun output durante l'esecuzione dell'OP rm -rf. Se avessero eseguito 'rm -r' senza file / directory specificati, avrebbero ricevuto questo messaggio di utilizzo: JanNash ~ $ usage: rm [-f | -i] [-dPRrvW] file ... unlink file
Jan Nash

2
@barrycarter Questo non è del tutto vero - tenterà comunque di eliminare /, salterà semplicemente il file inesistente xyz*(che semplicemente non si espanderà a causa della mancanza di una corrispondenza).
soffice

3
@barrycarter Questo comportamento dipende dalla configurazione globbing della shell. Almeno nel default di bash su macOS, in effetti lo elimina ae bper me - anche senza specificare -f. Esegui gli stessi comandi con echo rm -f a b c*invece di vedere il comportamento reale.
soffice

2
@barrycarter e fluffy: cosa succede dipende dal fatto che la variabile shell nonomatch sia impostata o meno.
Thomas Padron-McCarthy,

13

Per i principianti laici / Linux / Unix:

rm da solo non fa nulla perché non gli hai detto di cosa sbarazzarsi.

man rm può spiegare la maggior parte di questo, se lo capisci.

-r significa ricorsivo, come in "includi tutto nelle sottocartelle"

-f significa forzare la modalità "non chiedermi di confermare"

rm -rf(NON FARE QUESTO)/ direbbe di eliminare tutto sotto /(la cartella principale) senza controllare (nelle recenti versioni di macOS SIP ti impedirà di rimuovere macOS stesso da questo, ma molte altre cose verranno eliminate)

rm [some file name] eliminerebbe semplicemente quel file.

rm -rf /home/myuser/bookssarebbe eliminare tutto in myuser's bookscartella, così come la cartella.


6
Oggi devi fare rm -rf / --no-preserve-rootper sparare correttamente alla gamba.
Gallifreyan,

1
@Gallifreyan C'è mai un modo per sparare correttamente la gamba?
PascalVKooten,

1
Si dice che questo funzioni bene. Non ne conosco altri :)
Gallifreyan,

1
@Gallifreyan su macOS? pastebin.com/aVAsNcKC indica diversamente
nohillside

@Gallifreyan: find / -deletedovrebbe "funzionare" (cioè eliminare effettivamente le cose, quindi non eseguirlo.)
Peter Cordes

4

No, ma se si desidera eliminare Ecco un esempio:

Dopo aver avviato Terminal (nella cartella / Applicazioni / Utilità) digitare cd ~ / Desktop per accedere alla directory Desktop. Se qui avessi un file chiamato MyFile.rtf che non avresti mai voluto rivedere, potresti eseguire questo comando:

rm MyFile.rtf

Quando premi Invio, il file diventerà falso! Sarà andato, toast, storia. Non puoi riaverlo.


In realtà rm rimuove tutti i riferimenti al file, non cancella il disco rigido del file sovrascrivendo ogni byte, se capisco correttamente la documentazione.
NoBugs

@NoBugs Ma, in tutta onestà, è così che funzionano tutte le "eliminazioni" moderne, incluso Windows. Se la funzione di eliminazione sta sovrascrivendo ciascun byte, verrà pubblicizzata come tale (principalmente perché richiede più tempo e non è necessaria la maggior parte del tempo).
Insane
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.