Я не могу удалить дерево каталогов с помощью rm -rf

9

Это кажется мне очень странным. Я запускаю ядро ​​2.6.37.2 и запускаю:

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

Я получаю некоторые отклонения разрешений при копировании, как ожидалось, и в конце концов я нажимаю Control-C. Я получаю Permission deniedмного файлов при попытке удалить новый каталог и файлы.

Как примечание, я обнаружил это странное поведение, потому что друг прислал мне .tgzснимок своего /procрежиссера. Я извлек каталог, и когда я закончил просматривать его, у меня возникла та же проблема.

rm -rf как root работает.

lsattr показывает атрибут e (это то, что показывают все мои файлы / каталоги).

flumpb
источник
Я немного обобщил название вашего вопроса, потому что основная проблема не в этом /proc. Кстати, на этот раз уже немного поздно, но если вы выясните ответ после публикации вопроса, то вы можете ответить на него самостоятельно и оставить его другим людям, которые могут столкнуться с подобной проблемой.
Жиль "ТАК - перестань быть злым"

Ответы:

16

Если существует непустой каталог, в котором у вас нет разрешения на запись, вы не можете удалить его содержимое.

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

Причина в том, что rmон связан с разрешениями, как любая другая команда, а разрешение на удаление barтребует разрешения на запись foo. Это не применяется при запуске rmот имени пользователя root, поскольку у root всегда есть разрешение на удаление файла.

Чтобы сделать дерево каталогов удаляемым, сделайте все каталоги в нем доступными для записи (разрешения обычных файлов не имеют значения, когда дело доходит до удаления с помощью rm -f). Вы можете использовать любую из этих команд:

chmod -R u+w here        # slow if you have a lot of regular files
find here -type d -exec chmod u+w {} +
Жиль "ТАК - перестань быть злым"
источник
Все тот же результат «Операция не допускается»
Legionar