Що rm -rf
робити, коли використовується для видалення файлів чи каталогів?
Як спільно працюють -r
і -f
варіанти?
Що rm -rf
робити, коли використовується для видалення файлів чи каталогів?
Як спільно працюють -r
і -f
варіанти?
Відповіді:
Команда rm -rf
така ж, як і rm -r -f
.
З rm
сторінки man '(введіть man rm
термінал, щоб побачити її) -r
робить:
remove directories and their contents recursively
І -f
робить:
ignore nonexistent files and arguments, never prompt
Тож у поєднанні вони роблять і те, і інше.
Будь ласка, використовуйте цю команду обережно!
rm -rf /
теоретично видалить кожен файл на вашому комп'ютері, який знаходиться в каталозі, на який ви маєте дозвіл на запис. Якщо ви root, це означає знищення всієї системи. (На практиці це не працює, оскільки GNU rm
має особливий випадок, який відмовляється дозволити, rm -r /
якщо ви також не скажете --no-preserve-root
.)
rm -rf /
перевірити, чи правильно його спіймано.
На додаток до попередньої правильної відповіді, я хотів би навчити вас ловити рибу:
Коли ви не впевнені в тому, як працює команда, які параметри має і що вона робить, відкрийте термінал і введіть
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
rm
короткий для видалення. r
Прапор для видалення каталогів і їхнього вмісту рекурсивно і f
силу кошти, і він скасовує будь-які підказки підтвердження.
r flag is to remove directories
це не так. Він видаляє каталоги разом із його вмістом, це рекурсивна операція. Відповідно до ваших слів, вона видалила б лише каталоги, що з підкаталогами, файлами під нею? оскільки запис у каталозі містить лише відображення імені-inode, це не має сенсу ..
Як уже згадувалося, 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
помилитися.
Дивись також: