← Весь справочник

chown

Смена владельца и группы файла; chgrp — только группы

chown назначает файлу владельца и группу. От них зависит, какая тройка прав из chmod применяется к пользователю. Менять владельца может только root; обычный пользователь может лишь сменить группу своего файла на одну из своих групп (chgrp).

Синтаксис

chown [опции] владелец[:группа] файл…
chown [опции] --reference=образец файл…
chgrp [опции] группа файл…

Владельца и группу можно указать именем или числом (UID/GID). Посмотреть текущих: ls -l файл (третья и четвёртая колонки) или stat -c '%U:%G' файл.

Формы записи

ЗаписьЧто меняет
aliceтолько владельца
alice:devsвладельца и группу
:devsтолько группу (то же, что chgrp devs)
alice:владельца, а группу — на основную группу alice
1001:1001по числовым UID и GID, даже если такого пользователя нет

Опции

ОпцияЧто делает
-Rрекурсивно по каталогу
-c / -vсообщать об изменённых файлах / обо всех
-fне печатать большинство ошибок (код возврата всё равно ненулевой)
--reference=образецвзять владельца и группу с другого файла
--from=старый:стараяменять только файлы с указанным текущим владельцем и/или группой (--from=root, --from=:www-data)
--preserve-rootотказаться работать рекурсивно на /

Символические ссылки

ОпцияЧто делает
(по умолчанию)файл из командной строки — меняется цель ссылки; внутри -R ссылки не разыменовываются
-hменять владельца самой ссылки, а не цели
-R -Hразыменовать ссылки, указанные в командной строке, и пройти внутрь
-R -Lразыменовывать все ссылки на каталоги в дереве — опасно, можно уйти за пределы каталога
-R -Pне разыменовывать ничего (по умолчанию для -R)

Все эти опции есть и у chgrp.

Примеры

# отдать каталог приложения пользователю и группе www-data
chown -R www-data:www-data /srv/app

# сменить только группу
chgrp devs report.txt
chown :devs report.txt

# владелец и его основная группа
chown alice: notes.txt

# во всём дереве сменить владельца только у файлов, принадлежавших root
chown -R --from=root alice ~/project

# скопировать владельца с соседнего файла
chown --reference=/etc/hosts /etc/hosts.new

# владелец символической ссылки, а не файла, на который она указывает
chown -h alice /srv/app/current

# показать только реальные изменения
chown -Rc alice:devs /srv/shared

# найти и исправить файлы с «осиротевшим» владельцем
find /srv -nouser -exec chown root:root {} +

# проверить результат
stat -c '%U:%G %n' /srv/app /srv/app/*

Подводные камни

  • Пользователь должен существовать. chown bob файл без пользователя bob даст «invalid user». Проверь: id bob или getent passwd bob. То же с группой: «invalid group».
  • Числовой UID без пользователя принимается молча, и в ls -l будет число вместо имени. Так бывает с файлами из архивов и томов контейнеров.
  • setuid и setgid сбрасываются при смене владельца: файл 4755 после chown становится 0755. Если бит нужен — ставь chmod после chown.
  • Символические ссылки. Без -h chown ссылка меняет владельца целевого файла. При -R ссылки внутри дерева не разыменовываются — файлы вне каталога не затронутся, а вот с -L затронутся.
  • Точка вместо двоеточия (alice.devs) — устаревшая форма: новые версии печатают предупреждение. Пиши alice:devs.
  • Обычный пользователь не может отдать файл другому («Operation not permitted»), а chgrp разрешён только в группу, где он состоит.
  • Сменить владельца — не значит дать доступ. Если у владельца в правах нет r или w, он всё равно получит «Permission denied». Смотри права через ls -l.

См. также

chmod · useradd · id · getent · umask · find · stat