Что 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
для поиска на страницах руководства :
apropos <pattern>
Например:
apropos directory listing
rm
является коротким для удаления. Этот r
флаг предназначен для рекурсивного удаления каталогов и их содержимого, а также для f
принудительного применения, и он отменяет любые запросы на подтверждение.
r flag is to remove directories
это неправильно. Он удаляет каталоги вместе с их содержимым, это рекурсивная операция. По вашим словам, он будет удалять только каталоги, как насчет подкаталогов, файлов под ним? поскольку запись в каталоге содержит только сопоставление имени и индекса, это только не имеет никакого смысла ..
Как уже упоминалось, rm -rf <ARG>
предназначено для принудительного рекурсивного удаления файлов, где <ARG>
находится каталог (хотя это может быть просто файл).
Весь смысл -r
(рекурсивное удаление) состоит в том, что rm
невозможно удалить каталоги, если они не пусты, просто потому, что основной системный вызов, который rm
использует ( unlink ), работает только с пустыми каталогами. Таким образом, что -r
делает флаг, так это поиск в глубину, спускающийся в каталоги и сначала удаляющий файлы, и только потом, когда каталог пуст - он удалит его. Этот же эффект достигается с помощью find
команды с -delete
флагом (когда вы не указываете фильтрацию -type
, но это уже другая история).
Что касается -f
, он делает две вещи - одна предотвращает запрос, хотите ли вы удалить файл или нет (например, когда вы удаляете файл, принадлежащий другому пользователю, из вашего каталога, он не будет отображать rm: remove write-protected regular empty file 'f1'?
запрос подтверждения), и игнорирует несуществующие файлы. Так, например, с несуществующим именем файла вы должны получить rm: cannot remove 'nonexistent': No such file or directory
ошибку.
Смотрите также: