Linux / Comando rm: eliminar archivos y comprobar el alcance del borrado

rm es un comando que elimina archivos o directorios del sistema de archivos. No pasa por la papelera de reciclaje típica de escritorio y, especialmente si se usa junto con -r y -f, se pueden eliminar grandes cantidades de datos sin confirmación, por lo que la verificación de la ruta de destino es la más importante.

En este texto se describe la eliminación básica, la eliminación de directorios vacíos y recursiva, la opción de confirmación, los riesgos al usar comodines de shell y variables, y cómo limitar el alcance de la eliminación en automatización.

¿Qué es el comando rm?

rm elimina la entrada de directorio especificada. Si el número de enlaces de un archivo llega a 0 y ningún proceso lo tiene abierto, el espacio de almacenamiento puede ser reutilizado posteriormente. Por defecto, no elimina directorios, y para borrar un árbol de directorios se debe especificar la opción recursiva.

Sintaxis básica

rm [OPCIONES] ARCHIVO...

Use comillas para nombres con espacios y -- antes de operandos que puedan empezar por un guion. Los ejemplos son independientes: cree archivos desechables en un directorio de práctica nuevo y compruebe su ubicación antes de ejecutarlos. No copie las rutas de ejemplo sobre datos reales. Consulte rm --help y man rm para verificar las opciones de su implementación.

Uso básico de rm

Eliminar un archivo

Especifique la ruta exacta del archivo a eliminar. Los archivos cuyo nombre comienza con un guion deben colocarse después de --.

rm old-report.txt
rm -- -temporary.txt

Eliminar varios archivos

Se pueden usar varias rutas o comodines de shell, pero es seguro verificar el resultado de la expansión antes de la ejecución.

printf '%s\n' *.tmp
rm -- *.tmp

Eliminar árbol de directorios

-r elimina recursivamente el contenido subordinado. Primero, verifique el objetivo con find o ls y use la ruta lo más específica posible.

find build-cache -maxdepth 2 -print
rm -r -- build-cache

Cuando el comando de eliminación finaliza silenciosamente

rm generalmente no muestra nada incluso si tiene éxito. A continuación hay un ejemplo seguro de verificación que solo aplica a archivos de prueba creados manualmente.

printf 'demo\n' > disposable-demo.txt
rm -- disposable-demo.txt
test ! -e disposable-demo.txt
echo $?

La salida de ejemplo 0 significa que la ruta ya no existe. No hay garantía de que el archivo pueda recuperarse, y antes de escribir rm -r o rm -f en la ruta real, verifique la lista de objetivos de eliminación.

Opciones principales

Opciones Descripción
-r, -R Elimina recursivamente directorios y su contenido.
-i Solicita confirmación individual antes de cada eliminación.
-I Solicita confirmación una vez si se indican más de tres archivos o una eliminación recursiva.
-f, --force Ignora archivos que no existan y omite la verificación común.
-d, --dir Permite eliminar directorios vacíos.
-v Muestra los elementos eliminados.
--one-file-system No baja a otro sistema de archivos durante la eliminación recursiva.
--preserve-root[=all] Protege / de forma predeterminada; con =all también rechaza operandos en un dispositivo distinto del de su directorio padre.

Las opciones largas facilitan entender su significado y también ayudan a revisar scripts. Sin embargo, en scripts donde la portabilidad es importante, primero verifique si el sistema objetivo soporta esas opciones de extensión GNU.

Ejemplos de uso práctico

Prever la verificación de los objetivos de eliminación

Primero compruebe la expansión de los comodines y el valor de la variable. En el ejemplo siguiente, target debe contener la ruta concreta del directorio de práctica; no continúe si está vacío o fuera de ese directorio. Para procesar automáticamente nombres con saltos de línea, use herramientas compatibles con separadores NUL, como find -print0, en vez de analizar una lista de líneas.

printf 'target=%s\n' "$target"
find "$target" -maxdepth 2 -print

Usar la confirmación interactiva

Cuando elimine algunos archivos importantes directamente, -i es útil, y para verificar al menos una vez en trabajos con muchos archivos o de manera recursiva, -I es útil. En la automatización, en lugar de la opción interactiva, debe verificar las condiciones previas mediante código.

rm -i important.conf
rm -Ir old-release/

Conservar otros puntos de montaje

Antes de eliminar un árbol como /srv/chroot, compruebe que sea exactamente el árbol que desea retirar y revise sus montajes con findmnt. --one-file-system evita descender a sistemas de archivos distintos del correspondiente a cada operando, pero no protege datos enlazados mediante un montaje bind del mismo sistema de archivos ni un árbol importante indicado como operando. La opción no sustituye la revisión de las rutas.

findmnt --target /srv/chroot
rm -r --one-file-system -- /srv/chroot

Comparación de rm y comandos relacionados

Comando / método Rol principal Situaciones adecuadas
rm Eliminación de archivos y directorios recursivos Retirar las entradas de los elementos especificados, sin papelera
rmdir Eliminar solo directorios vacíos Cuando queda contenido que debe conservarse
Herramienta de papelera de escritorio Mover a una ubicación restaurable Cuando se necesita recuperar errores en un entorno interactivo
shred Intento de sobrescribir datos de archivos Cuando es necesario entender las condiciones y limitaciones del medio de almacenamiento y reducir rastros

Precauciones al usar

No usar rm -rf habitualmente

-r amplía el alcance y -f reduce las advertencias. Use solo las opciones necesarias y verifique que las rutas creadas como variables no estén vacías y estén debajo de la raíz prevista.

No confiar en los alias solo como medida de seguridad

alias rm='rm -i' puede no aplicarse en shells no interactivos u otros sistemas. La seguridad del script debe basarse en la verificación de rutas y la separación de privilegios, no en alias.

No asumir recuperación después de la eliminación

Los datos eliminados pueden ser muy difíciles o imposibles de recuperar dependiendo del estado del sistema de archivos y del dispositivo de almacenamiento. Los datos importantes deben tener una copia de seguridad verificada antes de eliminarlos.

FAQ

¿Si elimino con rm, va a la papelera?

Generalmente no. El rm de la línea de comandos no pasa por la papelera de escritorio, por lo que no se debe asumir que se puede restaurar inmediatamente.

¿Qué opción se necesita para eliminar un directorio?

Para directorios que contienen contenido, se requiere -r. Si el directorio está vacío, rmdir es una opción más restrictiva y segura.

¿Cuál es la diferencia entre rm -i y rm -I?

-i pregunta por cada elemento, y -I pregunta una vez al eliminar muchos archivos o de manera recursiva, reduciendo así las preguntas excesivas.

¿Se puede recuperar un archivo eliminado por error de inmediato?

No se puede garantizar. Debe reducirse la escritura inmediata y revisarse el procedimiento de recuperación de acuerdo con el sistema de archivos y la política de copias de seguridad.

Para elegir otra herramienta, consulte la Lista de comandos de uso frecuente en Linux. Las protecciones específicas de GNU se describen en la Documentación oficial de GNU Coreutils rm y en el Manual oficial de GNU Coreutils.