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

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

Я пытаюсь изменить владельца папки и подпапок, введя один из следующих кодов:

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/'

Что я делаю не так?

решение1

Почему строчные буквы $userне работают

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

Команда 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: имя пользователя, поскольку аргумент имени пользователя еще не был передан
  • -R: рекурсивная опция (лидирующий -символ указывает chownна то, что это аргумент опции)
  • /usr/bin/.folder/: файл или каталог для смены владельца, поскольку имя пользователя уже было передано

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

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

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

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

решение2

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

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

решение3

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

Связанный контент