![Изменение владельца папки не работает!](https://rvso.com/image/1083740/%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B2%D0%BB%D0%B0%D0%B4%D0%B5%D0%BB%D1%8C%D1%86%D0%B0%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B8%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82!.png)
Я пытаюсь изменить владельца папки и подпапок, введя один из следующих кодов:
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
и $USER
expand to соответственно) может быть разным. Обычно никакая вызванная переменная user
не определена и $user
не расширяется до нуля, в то время как вам нужно, чтобы $USER
which расширился до вашего имени пользователя.
Команда 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
.