Что делает \:
в приведенной ниже команде?
sudo chown nobody\: folder/
Это какая-то ошибка?
Какие:
Это называется побегом персонажа, и это гарантирует, что двоеточие буквально рассматривается как таковое.
Зачем:
В оболочке двоеточие можно использовать для отделения имени файла от имени хоста (обычно используется с такими командами, как rsync
и scp
). В chown используется для отделения пользователя от группы.
Оболочка сначала читает команду, и для обеспечения того, чтобы двоеточие не обрабатывалось как специальный символ, а вместо этого часть аргумента, отправляемая chown, она экранируется обратной косой чертой.
Следует отметить, что в этом конкретном случае я вообще не вижу необходимости в наличии двоеточия, поскольку указание группы, не говоря уже о пустом названии группы, не требуется для chown.
Как:
Префикс символа с обратной косой чертой является обычным явлением и может использоваться для многих других, которые в противном случае оболочка будет обрабатывать по-другому. Например:
ls test*
выведет список всех файлов, начинающихся с test ls test\*
выведет список файлов с именем test*
в котором звездочка является частью действительного имени файла.
Иногда escape-символ можно использовать наоборот, если вы хотите, чтобы нормальный символ обрабатывался особым образом. Примеры включают в себя:
\n
перевод строки\t
символ табуляцииОбратная косая черта (\) гарантирует, что оболочка не интерпретирует следующий символ как метасимвол оболочки. Поскольку двоеточие не такой характер, обратная косая черта фактически ничего не делает.
Двоеточие (:) используется для отделения "пользователя" от "группы" - команда chown
меняет владельца как пользователя, так и группы . Если группа не указана, двоеточие не является необходимым и поэтому фактически ничего не делает.
Обратная косая черта - это escape-символ, который изменяет интерпретацию специальных символов. Однако двоеточие не является специальным символом для интерпретатора оболочки (например, bash
), поэтому оно фактически ничего не делает.
Символ двоеточия в chown
/chmod
используется для различения имени пользователя и группы (если указан операнд группы). Предыдущие версии утилиты chown использовали точку, но она была заменена на двоеточие, поскольку имена пользователей и групп могут содержать символ точки.
\
Не имеет никакого значения вообще, так как оболочка устраняет это. Утилита chown
не получит буквально nobody:
качестве первого аргумента.
Присутствие против отсутствия :
действительно имеет значение, все же. См. Страницу руководства chown для ясного описания.
sudo chown nobody folder/
меняет владельца, но оставляет группу файла без изменений.
sudo chown nobody: folder/
меняет владельца и группу файла. Группе присваивается группа по умолчанию для пользователя nobody
, как определено в /etc/passwd
или каком-либо другом механизме (например, ldap).