Совершенно новый владелец Mac, знакомящийся с машиной.
Я наткнулся на проблему, которая довольно надоедливая - я не могу использовать rm без sudo. Действительно, всякий раз, когда я пишу команду rm, результат будет следующим:
rm: illegal option -- I
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file
тогда как, если я буду выполнять команду, она будет успешно выполнена.
Дополнительная информация:
- macOS Sierra v.10.12.6
- Все файлы имеют права доступа 777 и принадлежат «персоналу» пользователя.
staff
не пользовательская группа / пользователь. Ожидается, что это базовый пользователь / группа, предоставляемая ОС.
Итак, вопрос в том, как мне сделать так, чтобы мне не нужно было sudo каждый раз, когда я хочу изменить эти файлы? (И, в конце концов, что это за «штатный» пользователь?)
cd ~/
), а затем создадите файл черезtouch
это,touch zzz_test.txt
и тогдаrm zzz_test.txt
вы говорите, что это не будет работать?sudo
работает в среде, отличной отbash
оболочки, из которой он вызывается. Похоже, у вас есть псевдоним или функция, которая переопределяетсяrm
путем добавления дополнительных параметров: используйтеtype -a rm
для поиска всех возможных интерпретаций. Кроме того, попробуйте$(which rm) ...
вместо тогоrm ...
, чтобы убедиться, что вы используете правильный исполняемый файл (это обычно/bin/rm
, но я чувствую, что на Mac может быть иначе).rm -I
указанный внизу файла. Удаление строки действительно прояснило проблему! Если вы хотите, вы можете скопировать свой комментарий в качестве ответа, и я приму его как правильный ответ.Ответы:
Из сообщения об ошибке выглядит, как будто у вас есть псевдоним или функция, которая переопределяется
rm
путем добавления дополнительных параметров, посколькуsudo
работает в среде, отличной от оболочки, из которой она вызывается, и обычно не импортирует определения псевдонимов и функций из инициализации оболочки скрипты.Эта команда показывает все возможные интерпретации
rm
команды:Кроме того, внутри оболочки вы можете использовать
$(which rm) ...
вместоrm ...
того, чтобы убедиться, что вы используете правильный исполняемый файл, так как внешняяwhich
программа не знает об определениях псевдонимов и функций, которыеtype
проверяет внутренняя команда. Команда с компонентом каталога всегда отправляется в файловую систему, чтобы найти ее, тем самым обходя псевдонимы и функции.Обратите внимание, что вам не нужен доступ на запись к файлу, чтобы удалить его: вам нужен доступ на запись к его родительскому каталогу.
источник
Основываясь на комментариях к вашему вопросу, если ваш пользователь не владеет файлом, вы, скорее всего, не сможете удалить объект без прав суперпользователя.
Staff
Системная группа MacOS. Изменение файлов, принадлежащих этой группе, может быть потенциально опасным, хотя вы, скорее всего, знаете, что делаете в своем сценарии использования.Что касается
-I
директивы, это не вrm
команде MacOS ; Вы должны будете использовать-i
, если у этого нет подобной замены.Чтобы пропустить sudo, вы можете добавить псевдоним rm в ваш .bashrc (
rm='sudo rm -i'
) и добавить себя в файл Sudoers MacOS с помощьюsudo visudo
, затем добавитьYOUR_USERNAME_HERE ALL=NOPASSWD: ALL
полный доступ sudo ко всем командам илиYOUR_USERNAME_HERE ALL=(ALL:ALL) NOPASSWD: /bin/rm
ограничить полный доступ только к команде rm.Примечание. Команда rm в MacOS может не находиться в / bin / rm. Я не использовал его недавно, но предположим, что он находится там от предыдущих знаний.
источник
-I
в качестве параметра по умолчанию. Хороший улов!