Comandos Linux rm y unlink: guía completa con sintaxis, opciones y ejemplos prácticos
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 | Sí | 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.
DUGLAS MORENO
Comentarios (0)
Sé el primero en comentar.