Смена владельца папки не работает!
Я пытаюсь изменить владельца папки и подпапок, набрав любой из них:
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/