¿Qué hace rm -rf?

25

¿Qué hace rm -rfcuando se usa para eliminar archivos o directorios?

¿Cómo funcionan juntas las opciones -ry -f?

Dime por qué
fuente
66
¿Cómo es que esto no se ha preguntado antes ?
Dan Dascalescu
16
@DanDascalescu Debido a que se responde trivialmente leyendo la página de manual, que debería ser el primer puerto de llamada de cualquier persona para responder una pregunta como esta.
David Richerby
99
Pruébalo y verás. (Spoiler: no.)
imallett
3
Mira por dónde ! ¡Esta pregunta debe ser una broma de DevRobot! ¿Cómo podrías llegar a tu nivel de karma sin consultar las páginas de manual? Ahora ... ¿eres humano?
Cbhihe
2
Totalmente se lee como una broma de hecho. Como si alguien tratara de preguntar, "¿la lluvia está hecha de H2O?" (Una buena respuesta sería: normalmente sí, pero en el futuro, una vez que el hombre haya destruido la mitad de la flora de la Tierra, el 50% se habrá convertido en ácido (como en la lluvia ácida))
syntaxerror

Respuestas:

52

El comando rm -rfes el mismo que rm -r -f.

Desde rmla página de manual de (escriba man rmun terminal para verlo) -rhace:

remove directories and their contents recursively

Y -fhace:

ignore nonexistent files and arguments, never prompt

Entonces en combinación hacen ambas cosas.

De hecho, es un comando muy peligroso porque eliminará de forma recursiva todo el contenido dentro del directorio que elija (o simplemente eliminará el archivo que elija), y lo hará sin que se lo solicite.

¡Utilice este comando con cuidado!

Fabby
fuente
@Paul, ¿qué haría la barra? Uso este comando para eliminar directorios con frecuencia y sin barra.
Octopus
1
@Octopus, la barra inclinada indica el directorio raíz. rm -rf /teóricamente eliminará todos los archivos de su computadora que residen en un directorio para el que tiene permiso de escritura. Si eres root, eso significa eliminar todo el sistema. (En la práctica, esto no funcionará porque GNU rmtiene un caso especial que se niega a permitir rm -r /a menos que también diga --no-preserve-root.)
CJM
10
De todos modos, no recomiendo tratar rm -rf /de ver si está atrapado correctamente.
cjm
2
@mattburnett También es peligroso en una VM: es posible que tenga monturas que no sean locales para la VM. En particular, creo que es bastante común montar uno de los directorios de la máquina host en la VM para compartir archivos entre el host y la VM.
hvd
1
@mattburnett Tengo máquinas virtuales. No tengo una VM en cuarentena. Simplemente no ejecuto ejecutables desconocidos. :)
hvd
22

Además de la respuesta correcta anterior, me gustaría enseñarle a pescar:

Cuando no esté seguro de cómo funciona un comando, qué opciones tiene y qué hace, abra un terminal y escriba

man <command>

Por ejemplo:

man rm

Una vez allí, puede buscar la opción. Una página de manual puede ser muy larga de leer, así que en el tipo de terminal:

/<pattern>

Entonces, por ejemplo, haciendo:

/-f

Puede aterrizar fácilmente a:

-f, --force
              ignore nonexistent files and arguments, never prompt

Para -r hacer:

-r, -R, --recursive
              remove directories and their contents recursively

Puede moverse entre los resultados de búsqueda usando n(siguiente) y N(anterior).

Prima:

Si necesita hacer algo, pero no conoce el nombre del comando, use apropospara buscar en páginas de manual:

apropos <pattern>

Por ejemplo:

apropos directory listing
Federico Ponzi
fuente
8

rmes la abreviatura de eliminar. La rbandera es para eliminar directorios y sus contenidos de forma recursiva y los fmedios se fuerzan, y anula cualquier solicitud de confirmación.

Chris
fuente
3
Estrictamente hablando r flag is to remove directories no es correcto ... elimina directorios junto con su contenido, es una operación recursiva ... de acuerdo con sus palabras, solo eliminaría los directorios, ¿qué pasa con los subdirectorios, los archivos que se encuentran debajo? como entrada de directorio contiene asignaciones de nombres de nodo-i-solamente, esto sólo no tiene ningún sentido ..
heemayl
Tienes razón, editaré mi respuesta.
Chris
1
-r elimina directorios y sus contenidos de forma recursiva.
Jim Balter
3

Como ya se mencionó, rm -rf <ARG>está destinado a eliminar los archivos de forma recursiva, donde <ARG>hay un directorio (aunque puede ser un archivo muy bien).

El objetivo de -r(eliminación recursiva) es que rmno puede eliminar directorios si no están vacíos, simplemente porque la llamada al sistema subyacente que rmusa ( desvincular ) opera solo en directorios vacíos. Por lo tanto, lo -rque hace el indicador es una búsqueda profunda que desciende en directorios y elimina archivos primero, y solo luego cuando el directorio está vacío, lo eliminará. Este mismo efecto se logra mediante un findcomando con -deletebandera (cuando no especificas el filtrado por -type, pero esa es otra historia).

En cuanto a -f, hace dos cosas: una evita que se pregunte si desea eliminar el archivo o no (como cuando elimina un archivo propiedad de otro usuario de su directorio, no mostrará un rm: remove write-protected regular empty file 'f1'?mensaje de confirmación), e ignora archivos no existentes Entonces, por ejemplo, con un nombre de archivo inexistente, debería obtener un rm: cannot remove 'nonexistent': No such file or directoryerror.

Ver también:

Sergiy Kolodyazhnyy
fuente