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

586
Philippe Hebert

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

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

2 ответа на вопрос

2
AFH

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

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

type -a rm 

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

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

1
Dooley_labs

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

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

Ваш ответ в сочетании с AFH заставил меня осознать, что у меня была настройка псевдонима для rm, которая включала `-I` в качестве параметра по умолчанию. Хороший улов! Philippe Hebert 6 лет назад 0

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