Смена владельца папки не работает!

Я пытаюсь изменить владельца папки и подпапок, набрав любой из них:

sudo chown $user -R /usr/bin/.folder/
sudo chown $user -R /usr/bin/folder/
sudo chown $user -R /usr/bin/.folder
sudo chown $user -R /usr/bin/folder

Но я получаю вывод:

chown: missing operand after '/usr/bin/.folder/'

Что я делаю неправильно?

3 ответа

Почему строчные $user Не работает

Чтобы прояснить и расширить то, что сказали другие, переменные оболочки и среды чувствительны к регистру. user а также USER разные переменные, поэтому их содержимое (которое $user а также $USER расширить, соответственно) может быть разным. Как правило, переменная не называется user определяется и $user расширяется до нуля, в то время как вы хотите $USER который расширится до вашего имени пользователя.

echo Команда обычно подходит для проверки значения переменной:

$ echo "$user"

$ echo "$USER"
ek

Для переменных, значения которых не содержат пробелов, кавычки могут быть удалены без влияния на вывод.
Так что я мог бы просто использовать echo $USER если бы я хотел.

Другой вариант, для chown

Вы, вероятно, знаете свое имя пользователя, так что вы можете просто использовать его вместо $USER, Если вы это сделаете, обязательно пропустите $ знак

Например, так как мое имя пользователя ek Я мог бы использовать:

sudo chown ek -R /usr/bin/.folder/

Почему вы получаете эту ошибку

Вам может быть интересно, почему вы получаете конкретное сообщение об ошибке:

chown: missing operand after '/usr/bin/.folder/'

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

Ты бежал sudo chown $user -R /usr/bin/.folder/, и с тех пор user было, вероятно, неопределенным, $user расширился до нуля, и это было эквивалентно выполнению:

sudo chown -R /usr/bin/.folder/

-R вариант делает chown действовать на каждый файл в дереве каталогов, как вы, вероятно, знаете. поскольку $user расширился до нуля, /usr/bin/.folder/ был первым необязательным аргументом chownи, таким образом, был интерпретирован как аргумент, указывающий желаемое владение (например, имя пользователя). /usr/bin/.folder недопустимый синтаксис для этого, но эта конкретная ошибка осталась незамеченной, потому что остановлена ​​другая ошибка chown во-первых: аргументов больше не было, и поэтому ничего не было указано для chown оперировать.

Другими словами, если я побежал sudo chown $USER -R /usr/bin/.folder/ это расширилось бы до sudo chown ek -R /usr/bin/.folder/ а также chown будет интерпретировать свои аргументы следующим образом:

  • ek: username, поскольку аргумент username еще не передан
  • -R: рекурсивный вариант (ведущий - это то, что делает chown знаю, что это вариант аргумента)
  • /usr/bin/.folder/: файл или каталог для смены владельца, так как имя пользователя уже передано

Но если я побежал sudo chown $user -R /usr/bin/.folder это расширилось бы до sudo chown -R /usr/bin/.folder/ а также chown будет интерпретировать свои аргументы следующим образом:

  • -R: рекурсивная опция
  • /usr/bin/.folder/: username, поскольку аргумент username еще не передан

Дальнейшее чтение

Для получения дополнительной информации вы можете быть заинтересованы в:

Пожалуйста, используйте $USER вместо $user,

sudo chown $USER -R /usr/bin/.folder/

user переменная, вероятно, пуста. Пытаться $USER,

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