Si creo un archivo y luego cambio sus permisos a 444
(solo lectura), ¿por qué rm
¿Se puede eliminar?
Si hago esto:
echo test > test.txt
chmod 444 test.txt
rm test.txt
…rm
me preguntará si quiero eliminar el archivo protegido contra escritura test.txt
. Hubiera esperado que rm
no puedo eliminar dicho archivo y tendría que hacer un chmod +w test.txt
primero. Si hago rm -f test.txt
entonces rm
eliminará el archivo sin siquiera preguntar, aunque sea de solo lectura.
¿Alguien puede aclarar? Estoy usando Ubuntu 12.04/bash.
Respuesta aceptada:
Todo rm
necesita es permiso de escritura+ejecución en el directorio principal. Los permisos del archivo en sí son irrelevantes.
Aquí hay una referencia que explica el modelo de permisos más claramente que nunca:
Cualquier intento de acceder a los datos de un archivo requiere permiso de lectura. Cualquier
intento de modificar los datos de un archivo requiere permiso de escritura. Cualquier
intento de ejecutar un archivo (un programa o un script) requiere permiso de ejecución
...
Debido a que los directorios no se usan de la misma manera que los archivos normales, los permisos
funcionan de forma ligeramente diferente (pero solo ligeramente). Un intento
de enumerar los archivos en un directorio requiere permiso de lectura para el directorio
, pero no para los archivos que contiene. Un intento de agregar un archivo a un directorio
, eliminar un archivo de un directorio o cambiar el nombre de un archivo, todos
requieren permiso de escritura para el directorio, pero (quizás sorprendentemente)
no para los archivos dentro. El permiso de ejecución no se aplica a los directorios
(un directorio no puede ser también un programa). Pero ese
bit de permiso se reutiliza para directorios con otros fines.
Se necesita permiso de ejecución en un directorio para poder acceder a él con un CD
(es decir, para convertir algún directorio en su directorio de trabajo actual).
Se necesita ejecutar en un directorio para acceder a la información de "inodo" de
los archivos que contiene. Necesita esto para buscar un directorio para leer los
inodos de los archivos que contiene. Por esta razón, el permiso de ejecución en
un directorio a menudo se denomina permiso de búsqueda.