Я не можу видалити дерево каталогів за допомогою rm -rf


9

Це здається мені дуже дивним. Я запускаю ядро ​​2.6.37.2 і запускаю:

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

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

Як замітку, я знайшов цю дивну поведінку, тому що друг надіслав мені .tgzзнімок свого /procрежисера. Я витягнув каталог, і коли я закінчив переглядати його, у мене була та сама проблема.

rm -rf як корінь працює.

lsattr показує атрибут e (про що показують усі мої файли / каталоги).


Я трохи узагальнив назву вашого запитання, оскільки основна проблема не стосується /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 {} +

І все той же результат "Операція заборонена"
легіонер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.