No puedo eliminar un árbol de directorios con rm -rf


9

Esto me parece muy extraño. Estoy ejecutando kernel 2.6.37.2 y ejecuté:

~]$ cp -r /proc/ here
~]$ rm -rf here

Obtengo algunos permisos denegados al copiar como se esperaba y eventualmente presiono Control-C. Me meto Permission denieden muchos archivos cuando intento eliminar el nuevo directorio y los archivos.

Como nota, encontré este comportamiento extraño porque un amigo me envió .tgzuna instantánea de su /procdirectorio. Extraje el directorio y cuando terminé de revisarlo tuve el mismo problema.

rm -rf como root funciona.

lsattr muestra el atributo e (que es lo que muestran todos mis archivos / directorios).


He generalizado un poco el título de su pregunta porque el tema central no se trata /proc. Por cierto, es un poco tarde para este momento, pero si descubre la respuesta después de publicar la pregunta, está bien responderla usted mismo y dejarla en manos de otras personas que puedan tener un problema similar.
Gilles 'SO- deja de ser malvado'

Respuestas:


16

Si hay un directorio no vacío donde no tiene permiso de escritura, no puede eliminar su contenido.

$ mkdir foo
$ touch foo/bar
$ chmod a-w foo
$ rm -rf foo
rm: cannot remove `foo/bar': Permission denied

La razón es que rmestá sujeto a permisos como cualquier otro comando, y el permiso para eliminar barrequiere permiso de escritura foo. Esto no se aplica cuando se ejecuta rmcomo root porque el root siempre tiene el permiso para eliminar un archivo.

Para hacer que el árbol de directorios sea borrable, haga que todos los directorios en él se puedan escribir (los permisos de los archivos normales no importan cuando se trata de eliminarlos rm -f). Puede usar cualquiera de estos comandos:

chmod -R u+w here        # slow if you have a lot of regular files
find here -type d -exec chmod u+w {} +

Sigue siendo el mismo resultado "Operación no permitida"
Legionar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.