macOS - не может быть без sudo

0

Совершенно новый владелец 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 каждый раз, когда я хочу изменить эти файлы? (И, в конце концов, что это за «штатный» пользователь?)

Филипп Эбер
источник
1
В каком каталоге это? Вы имеете в виду везде? Даже ваш домашний каталог? Если вы зайдете в свою домашнюю директорию ( cd ~/), а затем создадите файл через touchэто, touch zzz_test.txtи тогда rm zzz_test.txtвы говорите, что это не будет работать?
JakeGould
1
Вам не нужен доступ на запись к файлу, чтобы удалить его: вам нужен доступ на запись к его родительскому каталогу. Обратите внимание, что он sudoработает в среде, отличной от bashоболочки, из которой он вызывается. Похоже, у вас есть псевдоним или функция, которая переопределяется rmпутем добавления дополнительных параметров: используйте type -a rmдля поиска всех возможных интерпретаций. Кроме того, попробуйте $(which rm) ...вместо того rm ..., чтобы убедиться, что вы используете правильный исполняемый файл (это обычно /bin/rm, но я чувствую, что на Mac может быть иначе).
AFH
1
Я бы беспокоился о конкретной папке / файле, в котором вы пытаетесь работать. В обычном каталоге, которым владеет текущий пользователь при работе с обычным файлом, которым владеет текущий пользователь, вы сможете без проблем удалить файлы.
Кристофер Заложник
@AFH Отличная находка! Я перенес свой .bash_aliases из linux, и у меня был псевдоним толерантности к ошибкам для rm =>, rm -Iуказанный внизу файла. Удаление строки действительно прояснило проблему! Если вы хотите, вы можете скопировать свой комментарий в качестве ответа, и я приму его как правильный ответ.
Филипп Эбер

Ответы:

3

Из сообщения об ошибке выглядит, как будто у вас есть псевдоним или функция, которая переопределяется rmпутем добавления дополнительных параметров, поскольку sudoработает в среде, отличной от оболочки, из которой она вызывается, и обычно не импортирует определения псевдонимов и функций из инициализации оболочки скрипты.

Эта команда показывает все возможные интерпретации rmкоманды:

type -a rm

Кроме того, внутри оболочки вы можете использовать $(which rm) ...вместо rm ...того, чтобы убедиться, что вы используете правильный исполняемый файл, так как внешняя whichпрограмма не знает об определениях псевдонимов и функций, которые typeпроверяет внутренняя команда. Команда с компонентом каталога всегда отправляется в файловую систему, чтобы найти ее, тем самым обходя псевдонимы и функции.

Обратите внимание, что вам не нужен доступ на запись к файлу, чтобы удалить его: вам нужен доступ на запись к его родительскому каталогу.

AFH
источник
1

Основываясь на комментариях к вашему вопросу, если ваш пользователь не владеет файлом, вы, скорее всего, не сможете удалить объект без прав суперпользователя.

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. Я не использовал его недавно, но предположим, что он находится там от предыдущих знаний.

Dooley_labs
источник
Ваш ответ в сочетании с AFH заставил меня понять, что у меня есть настройка псевдонима для rm, которая включена -Iв качестве параметра по умолчанию. Хороший улов!
Филипп Эбер