¿Cómo puedo borrar un archivo de linux que no se deja?

Cuando en Linux no puedes borrar un archivo, el problema casi siempre no está en los permisos del fichero sino en los del directorio que lo contiene.

Qué permisos controlan el borrado

En Unix/Linux, para borrar un fichero hace falta permiso de escritura (w) y ejecución (x) sobre el directorio que lo contiene, no sobre el propio fichero. Eso significa que puedes tener un fichero 777 dentro de un directorio 555 y aún así rm dará Permission denied, porque el directorio no es escribible.

Motivos típicos de “Permission denied” al borrar

  1. Directorio sin permiso de escritura
    El usuario no tiene w sobre el directorio que contiene el fichero.
  2. Directorio sin permiso de ejecución
    Aunque parezca raro, sin x no puedes “navegar” la entrada del fichero en el directorio, por lo que rm falla.
  3. Mezcla de permisos y sudo
    Si el fichero o los directorios son propiedad de otro usuario, normalmente necesitas sudo o cambiar propietario/permisos antes de borrar.
  4. Atributos especiales (immutable, etc.)
    En algunos casos el fichero tiene atributos especiales (+i) que impiden borrarlo incluso con permisos de escritura.

Cambiar permisos del directorio antes de borrar

La solución básica es asegurarse de que el usuario tiene permisos de escritura sobre el directorio:

chmod u+w /ruta/al/directorio
rm -f /ruta/al/directorio/archivo

Si quieres borrar todo el contenido de un directorio, suele ser necesario:

chmod -R u+w /ruta/al/directorio
rm -rf /ruta/al/directorio

Bola EXTRA: Hagamos una función de terminal para borrar y chmod en una sola línea

Sabiendo lo anterior, y ante la necesidad de usar varias veces ambos comandos sobre un mismo directorio, he creado una función:

chmodrm() { chmod -R u+w "$1" && rm -rf "$1"}
  • chmod -R u+w "$1" da permiso de escritura al propietario (u) sobre el directorio y todo su contenido.
  • rm -rf "$1" borra el directorio y su contenido recursivamente solo si el chmod tiene éxito (por el &&).

Consideraciones de seguridad

  • Usa esta función solo en directorios donde realmente tengas autoridad para borrar; rm -rf es irreversible.
  • Si el directorio es propiedad de otro usuario, necesitas sudo o cambiar el propietario (chown) antes de chmod -R.
  • En entornos compartidos o de producción, considera usar rm -ri (interactivo) o loggear antes de borrar en lugar de un rm -rf ciego.

Fuentes: StackOverflow | RedHat

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *