Não consigo remover uma árvore de diretórios com rm -rf

9

Isso parece muito estranho para mim. Estou executando o kernel 2.6.37.2 e executei:

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

Eu recebo algumas negações de permissão ao copiar conforme o esperado e acabei atingindo o Control-C. Eu recebo Permission denied em muitos arquivos ao tentar remover o novo diretório e arquivos.

Como nota, encontrei esse comportamento estranho porque um amigo me enviou um .tgz de um instantâneo de seu /proc dir. Eu extraí o diretório e quando terminei de examiná-lo, tive o mesmo problema.

rm -rf como raiz funciona.

lsattr mostra o atributo e (que é o que todos os meus arquivos / diretórios mostram).

    
por flumpb 02.03.2011 / 19:41

1 resposta

16

Se houver um diretório não vazio no qual você não tem permissão de gravação, não será possível remover seu conteúdo.

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

O motivo é que rm está vinculado a permissões como qualquer outro comando e a permissão para remover bar requer permissão de gravação em foo . Isso não se aplica quando você executa rm como root porque o root sempre tem permissão para remover um arquivo.

Para tornar a árvore de diretórios deletável, torne todos os diretórios graváveis (as permissões de arquivos regulares não importam quando se trata de exclusão com rm -f ). Você pode usar um desses comandos:

chmod -R u+w here        # slow if you have a lot of regular files
find here -type d -exec chmod u+w {} +
    
por 02.03.2011 / 20:16