`rm -rf ` и `rm -r` дают одинаковые результаты

Имейте в виду, что я только учусь bash, поэтому, пожалуйста, объясните в умеренных условиях.

rm -rf а также rm -r кажется, чтобы сделать то же самое. В учебнике ( https://help.ubuntu.com/community/Beginners/BashScripting) говорится, что -f является силой, и компьютер не будет запрашивать разрешение на удаление файла.

Чтобы проверить это, я создал заблокированный файл, но -r а также -rf достичь тех же результатов, НЕ удаляя файл (разрешение запрещено).

Почему это?

4 ответа

В Ubuntu команда rm ведет себя так, как и ожидалось, при удалении файлов, которые у нас есть, без запроса при запуске с параметром -f,

Пример для файла, защищенного от записи:

:~/Test$ rm test.txt
rm: remove write-protected regular empty file ‘test.txt’? n
:~/Test$ rm -f test.txt
:~/Test$

Root сможет удалить все файлы независимо от прав доступа. Вот почему мы не можем увидеть разницу от варианта -f при беге sudo rm,

Мы должны знать, что поведение команд Unix может отличаться в разных ОС.

Пожалуйста, также позаботьтесь, чтобы дважды проверить вашу команду при запуске rm рекурсивно (-r). Эта команда, случайно введенная по неправильному пути, будет необратимо очищать все файлы там. Это может быть опасно для здоровья вашей системы, особенно в том случае, если он запускается без запроса об ошибках (-f).

Вот объяснение того, что делают оба варианта.

-f Удалить все файлы (независимо от того, защищены ли они от записи) в каталоге без запроса пользователя. Однако в защищенном от записи каталоге файлы никогда не удаляются (какими бы ни были их разрешения), но сообщения не отображаются. Если предпринимается попытка удаления защищенного от записи каталога, эта опция не подавит сообщение об ошибке.

-r Рекурсивное удаление каталогов и подкаталогов в списке аргументов. Каталог будет очищен от файлов и удален. Обычно пользователю предлагается удалить любые защищенные от записи файлы, содержащиеся в каталоге. Однако файлы, защищенные от записи, удаляются без запроса, если используется параметр -f или если стандартный ввод не является терминалом, а параметр -i не используется. Символьные ссылки, которые встречаются с этой опцией, не будут пройдены. При попытке удаления непустого каталога, защищенного от записи, утилита всегда будет отказывать (даже если используется опция -f), что приведет к сообщению об ошибке. О рм

Смотрите также Справочник по командам

Давайте сделаем это ясно:

  • rm -rf directory означает принудительное (не задавайте вопросы, просто сделайте это) рекурсивное удаление каталога.
  • rm -r directory означает попытку удалить рекурсивный каталог.

Это то, что man rm говорит:

-f, --force
       ignore nonexistent files and arguments, never prompt
[...]
-r, -R, --recursive
       remove directories and their contents recursively

Еще одна полезная информация со страницы руководства:

 [...] если файл недоступен для записи, стандартный ввод - это терминал, и
опция -f или --force не указана, или -i или
--interactive= опция всегда указана, rm запрашивает у пользователя
удалить файл. Если ответ не является положительным, файл
пропускаются. 

Конечно, если у вас нет разрешения на удаление / удаление файла, вы получите rm: cannot remove ‘file_name’: Permission denied ошибка. -f опция не остается для удаления файлов, если у вас нет разрешения в любом случае!

Похоже, у вас нет прав для удаления этого файла, возможно, учетная запись администратора не является root. Проблема не должна быть rm.

Включить root: http://support.apple.com/kb/ht1528

В любом случае, OSX - это не Ubuntu и не Linux, поэтому там все может быть по-другому, лучше спросите на форуме OSX...

Другие вопросы по тегам