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

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

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

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

Почему это?

5
задан 3 December 2013 в 01:41

4 ответа

Давайте проясним:

  • 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

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

[...] if  a file is unwritable, standard input is a terminal, and
the  -f  or   --force   option   is   not   given,   or   the   -i   or
--interactive=always  option  is given, rm prompts the user for whether
to remove the file.  If the response is not affirmative,  the  file  is
skipped.

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

0
ответ дан 3 December 2013 в 01:41

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

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

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

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

.
0
ответ дан 3 December 2013 в 01:41

В 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).

0
ответ дан 3 December 2013 в 01:41

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

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

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

0
ответ дан 3 December 2013 в 01:41

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

Похожие вопросы: