Що робить rm -rf?


25

Що rm -rfробити, коли використовується для видалення файлів чи каталогів?

Як спільно працюють -rі -fваріанти?



16
@DanDascalescu Тому що на нього тривіально відповідають, прочитавши чоловічу сторінку, яка повинна бути першим портом дзвінка для відповіді на подібне запитання.
Девід Річербі

9
Спробуйте і подивіться. (Спойлер: ні.)
imallett

3
За Голлі! Це питання має бути приворотом від DevRobot! Як ви могли це зробити до рівня карми, не звертаючись ніколи до сторінок. Тепер ... ти людина ?!
Cbhihe

2
Повністю читається, як справді. Ніби хтось намагався запитати: "чи дощ з Н2О?" (Хороша відповідь буде: Зазвичай так, але в майбутньому, як тільки людина буде знищена половиною флори Землі, 50% її перетвориться на кислоту (як при кислотному дощі))
синтаксис-помилка

Відповіді:


52

Команда rm -rfтака ж, як і rm -r -f.

З rmсторінки man '(введіть man rmтермінал, щоб побачити її) -rробить:

remove directories and their contents recursively

І -fробить:

ignore nonexistent files and arguments, never prompt

Тож у поєднанні вони роблять і те, і інше.

Насправді це дуже небезпечна команда, оскільки вона буде рекурсивно видаляти все в обраному вами каталозі (або просто видалити обраний вами файл), і це зробить це, не коли-небудь спонукаючи вас.

Будь ласка, використовуйте цю команду обережно!


@Paul, що б зробив нахил? Я використовую цю команду для частого видалення грядок і без нахилу.
Восьминіг

1
@Octopus, коса риса сама по собі вказує на кореневу директорію. rm -rf /теоретично видалить кожен файл на вашому комп'ютері, який знаходиться в каталозі, на який ви маєте дозвіл на запис. Якщо ви root, це означає знищення всієї системи. (На практиці це не працює, оскільки GNU rmмає особливий випадок, який відмовляється дозволити, rm -r /якщо ви також не скажете --no-preserve-root.)
cjm

10
Тим не менш, я не рекомендую намагатися rm -rf /перевірити, чи правильно його спіймано.
cjm

2
@mattburnett Небезпечно і для VM: у вас можуть бути кріплення, які не є локальними для VM. Зокрема, я вважаю, що досить часто монтувати один із каталогів хост-машини на VM для обміну файлами між хостом і VM.
hvd

1
@mattburnett У мене є VM. У мене немає карантинованого ВМ. Я просто не запускаю невідомі виконувані файли. :)
hvd

22

На додаток до попередньої правильної відповіді, я хотів би навчити вас ловити рибу:

Коли ви не впевнені в тому, як працює команда, які параметри має і що вона робить, відкрийте термінал і введіть

man <command>

Наприклад:

man rm

Потрапивши туди, ви можете шукати варіант. Сторінка "man" може читати дуже довго, тому в терміналі типу:

/<pattern>

Наприклад, роблячи:

/-f

Ви можете легко приземлитися в:

-f, --force
              ignore nonexistent files and arguments, never prompt

Для -r робіть:

-r, -R, --recursive
              remove directories and their contents recursively

Ви можете переходити між результатами пошуку, використовуючи n(наступний) та N(попередній).

Бонус:

Якщо вам потрібно щось зробити, але ви не знаєте імені команди, використовуйте aproposдля пошуку на сторінках man:

apropos <pattern>

Наприклад:

apropos directory listing

8

rmкороткий для видалення. rПрапор для видалення каталогів і їхнього вмісту рекурсивно і fсилу кошти, і він скасовує будь-які підказки підтвердження.


3
Власне кажучи, r flag is to remove directories це не так. Він видаляє каталоги разом із його вмістом, це рекурсивна операція. Відповідно до ваших слів, вона видалила б лише каталоги, що з підкаталогами, файлами під нею? оскільки запис у каталозі містить лише відображення імені-inode, це не має сенсу ..
heemayl

Ви маєте рацію, я відредагую свою відповідь.
Кріс,

1
-r видаляє каталоги та їх вміст рекурсивно.
Джим Балтер

3

Як уже згадувалося, rm -rf <ARG>мається на увазі примусове видалення файлів рекурсивно, де <ARG>є каталог (хоча це може бути файлом просто чудово).

Вся суть -r(рекурсивне видалення) полягає в тому, що rmнеможливо видалити каталоги, якщо вони не порожні, просто тому, що базовий системний виклик, який rmвикористовує ( від’єднати ), працює лише в порожніх каталогах. Таким чином, те, що -rробить прапор, - це пошук по глибині, який спускається в каталоги та видаляє файли спочатку, і лише потім, коли каталог порожній - він видалить його. Цей же ефект досягається за допомогою findкоманди з -deleteпрапором (коли ви не вказуєте фільтрацію за -type, але це вже інша історія).

Що стосується -f, це робить дві речі - одна запобігає запиту на те, чи потрібно вилучити файл чи ні (наприклад, коли ви видаляєте файл із власника іншого користувача з вашого каталогу, він не відображатиме rm: remove write-protected regular empty file 'f1'?запит підтвердження), і ігнорує неіснуючі файли. Так, наприклад, при неіснуючому імені файлу ви повинні rm: cannot remove 'nonexistent': No such file or directoryпомилитися.

Дивись також:

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