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
- Directorio sin permiso de escritura
El usuario no tienewsobre el directorio que contiene el fichero. - Directorio sin permiso de ejecución
Aunque parezca raro, sinxno puedes “navegar” la entrada del fichero en el directorio, por lo quermfalla. - Mezcla de permisos y
sudo
Si el fichero o los directorios son propiedad de otro usuario, normalmente necesitassudoo cambiar propietario/permisos antes de borrar. - 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 elchmodtiene éxito (por el&&).
Consideraciones de seguridad
- Usa esta función solo en directorios donde realmente tengas autoridad para borrar;
rm -rfes irreversible. - Si el directorio es propiedad de otro usuario, necesitas
sudoo cambiar el propietario (chown) antes dechmod -R. - En entornos compartidos o de producción, considera usar
rm -ri(interactivo) o loggear antes de borrar en lugar de unrm -rfciego.
Fuentes: StackOverflow | RedHat