Имейте в виду, что я только учусь bash, поэтому, пожалуйста, объясните в умеренных выражениях.
rm -rf
и rm -r
, кажется, делают то же самое. В руководстве ( https://help.ubuntu.com/community/Beginners/BashScripting ) говорится, что -f
является принудительным, и компьютер не будет запрашивать разрешение на удаление файла.
Чтобы проверить это, я создал заблокированный файл, но -r
и -rf
достигли тех же результатов, НЕ удаляя файл (В доступе отказано).
Почему это?
Давайте проясним:
rm -rf directory
означает принудительное (не задавайте вопросы, просто сделайте это) рекурсивное удаление каталога . rm -r directory
означает попытку удалить рекурсивный каталог . Вот что man rm
говорит:
blockquote>-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.blockquote>Конечно, если у вас нет разрешения на удаление / удаление файла, вы получите ошибку
rm: cannot remove ‘file_name’: Permission denied
. Опция-f
не остается для удаления файлов, на которые у вас нет разрешения ни в коем случае!
Вот объяснение того, что делают оба варианта.
-f Удалять все файлы (независимо от того, защищены ли они от записи) в каталоге без запроса пользователя. Однако в защищенном от записи каталоге файлы никогда не удаляются (какими бы ни были их разрешения), но сообщения не отображаются. Если предпринимается попытка удаления каталога, защищенного от записи, эта опция не подавляет сообщение об ошибке.
-r Рекурсивно удалять каталоги и подкаталоги из списка аргументов. Каталог будет очищен от файлов и удален. Обычно пользователю предлагается удалить любые защищенные от записи файлы, содержащиеся в каталоге. Однако файлы, защищенные от записи, удаляются без запроса, если используется параметр -f или если стандартный ввод не является терминалом, а параметр -i не используется. Символьные ссылки, которые встречаются с этой опцией, не будут пройдены. При попытке удаления непустого каталога, защищенного от записи, утилита всегда будет отказывать (даже если используется опция -f), что приведет к сообщению об ошибке. About rm < / sup>
См. также Справочник команд
. В 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 может отличаться в разных ОС.
blockquote>Пожалуйста, также внимательно проверьте вашу команду при рекурсивном запуске
rm
(-r
). Эта команда, случайно введенная по неправильному пути, будет необратимо очищать все файлы там. Это может быть опасно для здоровья вашей системы, особенно в том случае, если он запускается без запроса об ошибках (-f
).
Похоже, у вас нет прав на удаление этого файла, возможно, учетная запись администратора не является root. Проблема не должна быть rm.
Включить root: http://support.apple.com/kb/ht1528
В любом случае, OSX не Ubuntu и не Linux, таким образом, вещи там может быть по другому, лучше спросите на каком-нибудь форуме OSX ...