2

Что делает \: в приведенной ниже команде?

sudo chown nobody\: folder/

Это какая-то ошибка?

4 ответа4

2

Какие:

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

Зачем:

В оболочке двоеточие можно использовать для отделения имени файла от имени хоста (обычно используется с такими командами, как rsync и scp). В chown используется для отделения пользователя от группы.

Оболочка сначала читает команду, и для обеспечения того, чтобы двоеточие не обрабатывалось как специальный символ, а вместо этого часть аргумента, отправляемая chown, она экранируется обратной косой чертой.

Следует отметить, что в этом конкретном случае я вообще не вижу необходимости в наличии двоеточия, поскольку указание группы, не говоря уже о пустом названии группы, не требуется для chown.

Как:

Префикс символа с обратной косой чертой является обычным явлением и может использоваться для многих других, которые в противном случае оболочка будет обрабатывать по-другому. Например:

ls test* выведет список всех файлов, начинающихся с test ls test\* выведет список файлов с именем test* в котором звездочка является частью действительного имени файла.


Иногда escape-символ можно использовать наоборот, если вы хотите, чтобы нормальный символ обрабатывался особым образом. Примеры включают в себя:

  • \n перевод строки
  • \t символ табуляции
2

Обратная косая черта (\) гарантирует, что оболочка не интерпретирует следующий символ как метасимвол оболочки. Поскольку двоеточие не такой характер, обратная косая черта фактически ничего не делает.

Двоеточие (:) используется для отделения "пользователя" от "группы" - команда chown меняет владельца как пользователя, так и группы . Если группа не указана, двоеточие не является необходимым и поэтому фактически ничего не делает.

0

Обратная косая черта - это escape-символ, который изменяет интерпретацию специальных символов. Однако двоеточие не является специальным символом для интерпретатора оболочки (например, bash), поэтому оно фактически ничего не делает.

Символ двоеточия в chown/chmod используется для различения имени пользователя и группы (если указан операнд группы). Предыдущие версии утилиты chown использовали точку, но она была заменена на двоеточие, поскольку имена пользователей и групп могут содержать символ точки.

0

\ Не имеет никакого значения вообще, так как оболочка устраняет это. Утилита chown не получит буквально nobody: качестве первого аргумента.

Присутствие против отсутствия : действительно имеет значение, все же. См. Страницу руководства chown для ясного описания.

sudo chown nobody folder/ меняет владельца, но оставляет группу файла без изменений.

sudo chown nobody: folder/ меняет владельца и группу файла. Группе присваивается группа по умолчанию для пользователя nobody , как определено в /etc/passwd или каком-либо другом механизме (например, ldap).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .