Tengo una carpeta con -wxpermisos llamados folder1y otra carpeta dentro llamada folder2con rwxpermisos.
Traté de eliminar folder1usando este comando:
rm -r folder1
Pero recibí el siguiente error:
rm: cannot remove 'folder1': Permission denied
La razón por la que creo que recibí este error es porque el rmprograma primero necesita obtener el contenido de folder1(obtener los nombres de los archivos y carpetas folder1que están dentro ) para poder eliminar ese contenido (porque no puede eliminar un archivo o carpeta sin saber su nombre, creo), y luego el rmprograma puede eliminarse folder1solo.
Pero como folder1no tiene el readpermiso, el rmprograma no puede obtener su contenido y, por lo tanto, no puede eliminar su contenido, y dado que no puede eliminar su contenido, no puede eliminarlo.
¿Estoy en lo correcto?
fuente

Respuestas:
Creo que su análisis es correcto: no puede eliminar el directorio ya que no está vacío, y no puede vaciarlo ya que no puede ver su contenido.
Solo lo intenté:
Cuando escribí "usted", me refería a cualquier programa que pueda ejecutar. Su
rm -rcomando primero ve quefolder1es un directorio, por lo que intenta descubrir su contenido para vaciarlo, pero falla por faltar el permiso de lectura, luego intenta eliminarlo pero falla porque no está vacío. El "Permiso denegado" es engañoso; Creo que "Directorio no vacío" (comormdirinformes) sería más apropiado).fuente
Directory not emptyen este caso ya que no sabría que está vacío o no. Aún recibirá el mismo error cuando intente eliminar un directorio vacío en el que no tiene permisos de lectura. (Además, ignore mi comentario anterior, no tenía puesto mi límite de pensamiento).rmdirpuede informar "Directorio no vacío". Y si lees mi prueba, verás que acepta eliminar elfolder1directorio, sin permiso de lectura , una vez que lo haya vaciado.Permission deniedcuando intentorm -r folder1cuando está vacío. Estoy en OpenBSD, no en Linux.-rse usa, cada entrada de directorio (excepto para.y..) debe eliminarse como si fuera un operando de archivorm -r. Parece que GNUrmsimplemente hace unrmdir()en el directorio si no es legible, porque no tendrá forma de obtener el contenido del mismo.Para que se produzca la eliminación, el sistema debe poder leer el contenido e identificar lo que se debe eliminar.
He intentado simular lo que estás intentando:
Si intentamos eliminar sin permisos de lectura, falla:
En una secuencia para los dos intentos, la diferencia es que el contenido del directorio no se puede leer (getdents):
Con permisos de lectura:
Para concluir, incluso si posee un directorio y tiene el bit ejecutable, aún necesita permisos de lectura para que pueda ver su contenido y eliminar la carpeta. Sin embargo, no es lo mismo para un archivo.
fuente
Bueno, no tengo suficiente reputación para comentar la respuesta de ttaran7, por lo que parece una respuesta que tendrá que ser. Mi voto positivo tampoco es visible públicamente, debido a la baja reputación. He votado esa respuesta por incluir realmente un seguimiento de llamadas del sistema, en lugar de solo especulaciones.
Para responder la pregunta del OP: Sí, su razonamiento era correcto: se bloquea al no leer el directorio
Hice un seguimiento similar a lo que ellos (ttaran7) habían hecho porque sospechaba el mismo razonamiento: la
rmllamada fallaría al no leer el directorio y eso sería el final de eso, no hay posibilidad de quejarse de que el directorio esté vacío. Al echar un segundo vistazo al rastro que hice, noté que se realizó una llamada al sistema para intentar desvincular el nombre de archivo proporcionado de todos modos:Mire la cuarta línea:
unlinkat... que falla porque el directorio NO está vacío. Ahora, eso es lo que consideraría un comportamiento inesperado, el hecho de que intenta eliminar el directorio, a pesar de no tener permisos de lectura.fuente