Je ne peux pas supprimer une arborescence de répertoires avec rm -rf

9

Cela me semble très étrange. J'utilise le noyau 2.6.37.2 et j'ai exécuté:

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

J'obtiens un refus d'autorisation lors de la copie comme prévu et j'ai finalement frappé Control-C. Je reçois Permission deniedbeaucoup de fichiers lorsque j'essaie de supprimer le nouveau répertoire et les nouveaux fichiers.

Comme une note, j'ai trouvé ce comportement étrange parce qu'un ami m'a envoyé .tgzun instantané de son /procdir. J'ai extrait le répertoire et quand j'ai fini de le parcourir, j'ai eu le même problème.

rm -rf comme root fonctionne.

lsattr montre l'attribut e (qui est ce que montrent tous mes fichiers / répertoires).

flumpb
la source
J'ai généralisé un peu le titre de votre question parce que le problème principal ne concerne pas /proc. Soit dit en passant, il est un peu tard pour cette fois, mais si vous trouvez la réponse après avoir posté la question, c'est bien d'y répondre vous - même et de le laisser à d'autres personnes qui pourraient rencontrer un problème similaire.
Gilles 'SO- arrête d'être méchant'

Réponses:

16

S'il existe un répertoire non vide dans lequel vous n'avez pas l'autorisation d'écriture, vous ne pouvez pas supprimer son contenu.

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

La raison en est qu'elle rmest liée par des autorisations comme toute autre commande, et l'autorisation de supprimer barnécessite une autorisation d'écriture sur foo. Cela ne s'applique pas lorsque vous exécutez en rmtant que root, car root a toujours l'autorisation de supprimer un fichier.

Pour que l'arborescence des répertoires soit supprimable, rendez tous les répertoires qu'elle contient accessibles en écriture (les autorisations des fichiers normaux n'ont pas d'importance quand il s'agit de les supprimer rm -f). Vous pouvez utiliser l'une de ces commandes:

chmod -R u+w here        # slow if you have a lot of regular files
find here -type d -exec chmod u+w {} +
Gilles 'SO- arrête d'être méchant'
la source
Toujours le même résultat "Opération non autorisée"
Légionnaire