Comandos Linux rm y unlink: guía completa con sintaxis, opciones y ejemplos prácticos

DUGLAS MORENODUGLAS MORENO 👁 31

Introducción

En el día a día de cualquier persona que trabaja con sistemas Unix‑like, llega el momento de tener que eliminar archivos o directorios. Dos de los comandos más habituales para esta tarea son rm y unlink. Aunque a simple vista parecen hacer lo mismo, existen diferencias sutiles que pueden marcar la diferencia entre una operación segura y una pérdida accidental de datos.

Este artículo está dirigido a desarrolladores, administradores de sistemas y cualquier usuario intermedio de Linux que quiera profundizar en el funcionamiento interno de estos comandos, conocer sus opciones más usadas y aprender a utilizarlos de forma segura en la terminal. Al finalizar, sabrás exactamente qué hace cada comando, cuándo preferir uno sobre el otro y cuáles son las buenas prácticas para evitar errores costosos.


El comando rm

Qué hace

rm (remove) es el comando estándar para borrar archivos y directorios. A diferencia de un simple delete en algunas interfaces gráficas, rm elimina la entrada del sistema de archivos y libera los bloques de datos asociados, siempre que no haya otros enlaces duros apuntando al mismo inodo.

Sintaxis básica sintaxis

rm [opciones] archivo1 archivo2 ...


Puedes pasar uno o varios nombres de archivo (o directorios) como argumentos. Si el archivo no existe, **rm** mostrará un mensaje de error y continuará con los siguientes.

### Opciones/flags más usadas

- `-i` : modo interactivo, pide confirmación antes de cada borrado.
- `-f` : fuerza la eliminación sin preguntar, ignora errores de archivo inexistente.
- `-r` o `-R` : recursivo, necesario para borrar directorios y su contenido.
- `-d` : elimina directorios vacíos (equivalente a `rmdir`).
- `-v` : modo verbose, muestra qué se está borrando.
- `--preserve-root` : evita que se opere recursivamente sobre `/` (valor predeterminado en la mayoría de distribuciones modernas).
- `--no-preserve-root` : desactiva la protección anterior (usar con extrema cautela).

### Ejemplos prácticos

#### 1. Borrar un archivo simple

```bash
rm notas.txt

Este comando elimina notas.txt del directorio actual. Si el archivo tiene permisos de escritura para el usuario, se borrará sin preguntar.

2. Borrado interactivo

rm -i *.log

Se te pedirá confirmación para cada archivo que coincida con *.log. Responder y o yes lo eliminará; cualquier otra respuesta lo dejará intacto.

3. Forzar la eliminación de archivos protegidos

rm -f archivo_sin_permisos

Incluso si el archivo tiene permiso de solo lectura para el usuario, -f lo borrará sin preguntar.

4. Eliminar un directorio y todo su contenido

rm -r proyecto_viejo/

El flag -r recorre el árbol de directorios y elimina cada archivo y subdirectorio encontrados. Si alguno de ellos tiene permisos restrictivos, el comando fallará a menos que se combine con -f.

5. Borrado recursivo con salida detallada

rm -rvf temp/

-r para recursividad, -v para listar cada elemento eliminado y -f para forzar la eliminación sin preguntas.

6. Evitar accidentes en la raíz

# Esto está protegido por defecto
rm -rf /

En sistemas modernos, --preserve-root está activo, por lo que el comando anterior producirá un error y no hará nada. Si, por alguna razón, necesitas desactivar esa protección (no recomendado), usarías --no-preserve-root.

7. Borrar varios tipos de archivos con comodines

rm -i *.bak *.tmp

Se pedirá confirmación para cada archivo que termine en .bak o .tmp.

8. Eliminar directorios vacíos sin usar rmdir

rm -d carpeta_vacia/

Funciona igual que rmdir, pero permite combinar con otras opciones de rm.


El comando unlink

Qué hace

unlink es una llamada al sistema expuesta como comando que elimina un único nombre de archivo del sistema de archivos. En esencia, disminuye el contador de enlaces duros del inodo asociado; cuando ese contador llega a cero y no hay procesos con el archivo abierto, el espacio se libera.

A diferencia de rm, unlink no puede eliminar directorios y no posee opciones de recursividad ni modo interactivo. Su simplicidad lo convierte en una herramienta muy predecible cuando se necesita borrar exactamente un enlace.

Sintaxis

unlink archivo

Solo acepta un argumento: la ruta del archivo a desvincular. Si el archivo no existe, devuelve un error y termina con código de salida distinto de cero.

Opciones/flags

unlink prácticamente no tiene opciones. Las únicas que algunos implementos GNU aceptan son:

  • --help : muestra la ayuda y termina.
  • --version : muestra la versión del comando y termina.

No existen flags como -f, -r o -i.

Ejemplos prácticos

1. Borrar un archivo sencillo

unlink archivo_antiguo.txt

Equivalente a rm archivo_antiguo.txt pero sin posibilidad de borrar directorios ni de usar modo interactivo.

2. Manejo de errores cuando el archivo no existe

unlink no_existe
# Salida: unlink: cannot unlink ‘no_existe’: No such file or directory

El comando devuelve un mensaje claro y un código de error que se puede capturar en scripts.

3. Uso en scripts para limpieza segura

#!/bin/bash
ARCHIVO=\"${1}\"
if [ -e \"$ARCHIVO\" ]; then
    unlink \"$ARCHIVO\"
    echo \"Archivo $ARCHIVO eliminado\"
else
    echo \"Archivo $ARCHIVO no encontrado\"
fi

Este script verifica la existencia antes de llamar a unlink, evitando mensajes de error innecesarios.

4. Trabajar con enlaces duros

Supongamos que tienes dos enlaces duros al mismo contenido:

ln original.txt enlace1.txt
ln original.txt enlace2.txt

El inodo tiene un contador de enlaces de 3 (original + dos enlaces).

unlink enlace1.txt

Ahora el contador pasa a 2; el contenido sigue accesible mediante original.txt y enlace2.txt. Solo cuando se eliminen todos los enlaces, el espacio se liberará.

5. Combinar con find para borrar archivos que cumplen criterios

find . -type f -name '*.tmp' -exec unlink {} \;

find localiza cada archivo temporal y llama a unlink para cada uno. Esta combinación es útil cuando se quiere evitar las opciones de rm que podrían ser peligrosas.


Comparación entre rm y unlink

Característica rm unlink
Puede borrar directorios Sí (con -r/-R) No
Modo interactivo Sí (-i) No
Fuerza borrado Sí (-f) No
Salida verbosa Sí (-v) No
Elimina varios argumentos No (solo uno)
Manejo de enlaces duros Disminuye contador, libera si llega a 0 Idéntico (disminuye contador)
Seguridad contra raíz --preserve-root (activo por defecto) No aplica (solo un archivo)
Uso típico en scripts Cuando se necesita flexibilidad Cuando se quiere una operación atómica y predecible

En resumen, rm es la navaja suiza de la eliminación: versátil, pero con más posibilidades de error si se usan mal sus flags. unlink es un bisturí preciso: solo quita un nombre, lo que lo hace ideal para escenarios donde se necesita garantía de que no se eliminará nada más.


Buenas prácticas y errores comunes

1. Siempre verifica antes de borrar

Antes de ejecutar un rm -rf, lista lo que vas a eliminar:

ls -la ruta/que/vas/a/borrar

O usa el modo interactivo:

rm -ri ruta/que/vas/a/borrar

2. Prefiere unlink en scripts de limpieza

Cuando el objetivo es borrar un único archivo conocido, unlink elimina la tentación de agregar accidentalmente flags recursivos.

3. No confíes en comodines sin revisarlos

Un patrón como rm * puede expandirse a más de lo esperado si hay archivos con nombres que comienzan por guion (-). Para evitar que el guión sea interpretado como opción, usa --:

rm -- -*

Esto le indica a rm que todo lo que sigue es un argumento, no una opción.

4. Ten cuidado con los enlaces simbólicos

rm elimina el enlace simbólico, no el objetivo. Si tu intención es borrar el archivo al que apunta, debes dirigirte directamente al objetivo:

rm ruta/al/objetivo

unlink se comporta igual: solo quita el nombre del enlace.

5. Usa -preserve-root y nunca lo desactives a menos que sea absolutamente necesario

La mayoría de las distribuciones modernas lo tienen activado por defecto. Si ves un script que incluye --no-preserve-root, revisa su propósito y considera reemplazarlo por una operación más segura.

6. Registra las operaciones de borrado en entornos productivos

En servidores, considera usar auditd o simplemente registrar en un log antes de borrar:

echo "$(date): Borrando $ARCHIVO" >> /var/log/borrados.log
rm -f "$ARCHIVO"

7. Prueba en un entorno aislado

Antes de ejecutar una limpieza masiva en producción, replica la estructura en un directorio de prueba y ejecuta allí el comando.

8. Recuerda que el espacio no se libera inmediatamente si hay procesos abiertos

Si un archivo está abierto por un proceso, su espacio permanece reservado hasta que el proceso lo cierre. Herramientas como lsof pueden ayudar a identificar esos casos.

9. Evita borrar el directorio de trabajo actual

cd /tmp
rm -rf .   # Peligroso! Borra el contenido del directorio actual

Algunas versiones de rm protegen contra esto, pero no confíes en ello.

10. Usa alias con precaución

Algunos usuarios definen alias rm='rm -i' para forzar el modo interactivo. Esto puede crear una falsa sensación de seguridad cuando se trabaja en cuentas sin ese alias.


Conclusión

Hemos visto en detalle cómo funcionan rm y unlink, cuál es su sintaxis básica, qué opciones están disponibles y en qué situaciones cada uno resulta más adecuado.

  • rm es la herramienta de elección cuando necesitas borrar múltiples archivos, directorios completos o aplicar opciones como modo interactivo, forzado o verbose.
  • unlink se limita a eliminar un único nombre de archivo, ofreciendo una operación predecible y sin riesgos de flags adicionales, lo que lo hace ideal para scripts donde se quiere evitar efectos colaterales.

Ambos comandos actúan sobre el mismo mecanismo subyacente del sistema de archivos: disminuyen el contador de enlaces duros del inodo y liberan el espacio cuando ese contador llega a cero y nadie tiene el archivo abierto.

Para trabajar de forma segura, siempre verifica lo que vas a borrar, usa el modo interactivo cuando haya dudas, evita combinar comodines con flags peligrosos y, en scripts, prefiere unlink cuando el objetivo es un solo archivo. Con estas prácticas, podrás mantener tu sistema limpio sin poner en riesgo información valiosa.

Si te quedó alguna duda o querés profundizar en temas como la recuperación de archivos borrados con extundelete o testdisk, dejá un comentario y seguimos la conversación.


Comentarios (0)

Sé el primero en comentar.

Dejá tu comentario