¿Solo 'rm -rf' elimina algún archivo?

16

Recientemente corrí rm -rf, no rm -rf /, pero no pasó nada. Acabo de obtener un resultado como este:

Terminal

Tenía miedo porque me preocupaba que pudiera haber eliminado algunos archivos, pero no fue así. Solo asegúrese, ¿podría esto haber eliminado algún archivo de mi directorio?

usuario3439894
fuente
36
Si no está seguro (cierto 100%), no ejecute un comando.
Solar Mike
55
Nunca escriba comandos que no entienda. Todo lo que necesitabas era a. o un / y vas a eliminar MUCHAS cosas.
Nelson
18
Si desea experimentar con comandos potencialmente peligrosos, considere instalar una máquina virtual.
musicman523
66
Experimente todo lo que desee (siempre y cuando sus datos estén respaldados de forma segura). Es solo software y siempre puedes reinstalarlo si algo sale mal. No dejes que nadie te entrene para tenerle miedo a la computadora.
hobbs
3
Absolutamente ejecute un comando si no está seguro al 100%. Hay muchas maneras de aprender, y ejecutarlas es una de ellas. Tenga en cuenta emptor y tenga copias de seguridad, obviamente, y use máquinas virtuales y todo eso. Pero no correr nada por miedo hará poco para ayudarlo a crecer. Debería ser obvio cuándo tener más cuidado (es decir, rm), pero para muchos / la mayoría de los otros comandos, por ejemplo, todos los comandos de manipulación de texto basados ​​en tuberías, simplemente probarlos con frecuencia es lo más fácil / simple que puede hacer. Junto con el estudio de la página de manual, obviamente.
AnoE

Respuestas:

49

No, rm -rfno eliminará ningún archivo porque no proporcionó un argumento para el comando.

fd0
fuente
55
Y por -feso, no es un error ejecutarlo sin argumentos. rm -rse quejará de "operando faltante", pero lo -fsuprime, y también suprime los errores de los archivos que no existen. (Así, por ejemplo, una secuencia de comandos podría utilizar rm -rf /foo/bar/*para vaciar un directorio que ya podría estar vacío, sin tener que 2>/dev/nulla errores de squash.)
Peter Cordes
34

Desde la página del manual :

rm elimina cada archivo especificado.

Esto significa que puede usarlo para eliminar una lista de archivos a la vez, por ejemplo, con

rm -rf test1.txt test2.txt

Afortunadamente, todo lo que hizo fue pasar una lista vacía de archivos, por lo que no eliminó nada. Además, lo que dice @SolarMike : si no sabe lo que hace un comando, no lo ejecute . macOS está diseñado para 'ocultar' todas las operaciones peligrosas (pero potencialmente poderosas) de Unix del usuario final.

Glorfindel
fuente
77
Para su información, el -rindicador es innecesario a menos que esté eliminando directorios de forma recursiva. Si solo se trata de archivos, rmes suficiente, -fes forzoso, no te pregunta "¿estás seguro" de cada archivo?
Tim S.
99
Además, -f hace que el mensaje de uso no se muestre cuando lo usa incorrectamente. Esta es la razón por la cual no hubo salida en absoluto cuando se ejecutó el OP rm -rf. Si hubieran ejecutado 'rm -r' sin archivos / directorios especificados, habrían recibido este mensaje de uso: JanNash ~ $ usage: rm [-f | -i] [-dPRrvW] file ... unlink file
Jan Nash
2
@barrycarter Eso no es del todo cierto: aún intentará eliminar /, simplemente omitirá el archivo inexistente xyz*(que simplemente no se expandirá debido a la falta de coincidencia).
esponjoso
3
@barrycarter Ese comportamiento depende de la configuración global de su shell. Al menos en el valor predeterminado de bash en macOS, de hecho elimina ay bpara mí, incluso sin especificar -f. Realice los mismos comandos con echo rm -f a b c*para ver el comportamiento real.
esponjoso
2
@barrycarter y esponjoso: lo que sucede depende de si la variable de shell nonomatch está configurada o no.
Thomas Padron-McCarthy
13

Para el novato / Linux / Unix novato:

rm solo no hace nada porque no le has dicho de qué deshacerse.

man rm puede explicar la mayor parte de esto, si lo comprende.

-r significa recursivo, como en "incluir todo en subcarpetas"

-f significa fuerza, modo "no me pidas que confirme"

rm -rf(NO HAGA ESTO)/ diría que elimine todo lo que se encuentra debajo de /(la carpeta raíz) sin verificar (en las versiones recientes de macOS SIP evitará que elimine macOS por sí mismo, pero se eliminarán muchas otras cosas)

rm [some file name] simplemente eliminaría ese archivo.

rm -rf /home/myuser/bookseliminaría todo en myuserla bookscarpeta, así como la carpeta.

s1ns3nt
fuente
66
Hoy en día debes hacer rm -rf / --no-preserve-rootpara disparar tu pierna correctamente.
Gallifreyan
1
@Gallifreyan ¿Hay alguna manera de dispararle la pierna correctamente?
PascalVKooten
1
Se dice que este funciona bien. No conozco otro :)
Gallifreyan
1
@Gallifreyan en macOS? pastebin.com/aVAsNcKC indica lo contrario
nohillside
@Gallifreyan: find / -deletedebería "funcionar" (es decir, eliminar las cosas, así que no lo ejecutes )
Peter Cordes
4

No, pero si desea eliminar Aquí hay un ejemplo:

Después de iniciar Terminal (en su carpeta / Aplicaciones / Utilidades) escriba cd ~ / Desktop para navegar al directorio de Desktop. Si tuviera un archivo aquí llamado MyFile.rtf que nunca, nunca quiso volver a ver, podría ejecutar este comando:

rm MyFile.rtf

Cuando presionas Retorno, ¡el archivo desaparecerá! Se habrá ido, brindis, historia. No puedes recuperarlo.

Alvaro
fuente
En realidad, rm elimina toda referencia del archivo, no elimina el disco duro del archivo sobrescribiendo cada byte, si entiendo la documentación correctamente.
NoBugs
@NoBugs Pero para ser justos, así es como funcionan todas las 'eliminaciones' modernas, incluido Windows. Si la función de eliminación sobrescribe cada byte, se anunciará como tal (principalmente porque lleva más tiempo y es innecesario la mayor parte del tiempo).
Loco