Команда chgrp в Linux: смена группы файлов в Ubuntu

Введение

Разграничение прав пользователей в операционных системах семейства Linux во многом опирается на корректное распределение групповой принадлежности данных. Для изменения группы-владельца у файлов и директорий предусмотрена специализированная системная утилита chgrp. Ниже подробно рассмотрена работа с этой командой: от элементарных операций с единичными объектами до рекурсивной обработки файловых деревьев с флагом -R, дублирования параметров через --reference и тонкостей взаимодействия с символическими ссылками.

Основы работы с chgrp и модификация отдельного файла

Для демонстрации процесса создадим в системе новую группу с именем devteam, применив команду sudo groupadd -f devteam (флаг -f предотвратит ошибку, если группа уже зарегистрирована).

sudo groupadd -f devteam

Затем подготовим тестовый текстовый документ во временном каталоге с помощью вызова touch /tmp/sample_doc.txt.

touch /tmp/sample_doc.txt

Чтобы оценить текущие метаданные созданного файла, включая назначенного пользователя и группу, выведем подробный список атрибутов командой ls -l /tmp/sample_doc.txt.

ls -l /tmp/sample_doc.txt

Служебная утилита chgrp предназначена именно для управления групповым владением элементами файловой структуры.
Переназначим группу документа на devteam, выполнив инструкцию sudo chgrp devteam /tmp/sample_doc.txt.
⚙️ [Ключевые параметры утилиты]

-c : выводит отчет исключительно по тем объектам, у которых атрибуты действительно изменились.
-f : подавляет уведомления о большинстве неполадок при выполнении операции.
-v : формирует развернутый отчет о каждом обрабатываемом элементе.
-R : производит обход каталога вглубь, обновляя права на всех вложенных уровнях.
--reference=RFILE : заимствует идентификатор группы у файла-образца (RFILE), исключая необходимость указывать имя группы вручную.

sudo chgrp devteam /tmp/sample_doc.txt

Убедимся в успешной смене группы на devteam, повторно запросив характеристики объекта через ls -l /tmp/sample_doc.txt.

ls -l /tmp/sample_doc.txt

Рекурсивное применение к структуре каталогов (-R)

Когда требуется обновить групповые привилегии для целой иерархии папок, прибегают к каскадной обработке. Сформируем многоуровневую структуру каталогов командной конструкцией mkdir -p /tmp/project_dir/sub.

mkdir -p /tmp/project_dir/sub

Наполним созданные уровни тестовыми данными, сгенерировав пару файлов через touch /tmp/project_dir/file1.txt /tmp/project_dir/sub/file2.txt.

touch /tmp/project_dir/file1.txt /tmp/project_dir/sub/file2.txt

Перед вмешательством в атрибуты проверим исходное состояние корневой папки и всех ее вложений вызовом ls -lR /tmp/project_dir.

ls -lR /tmp/project_dir

Флаг -R переводит chgrp в рекурсивный режим, заставляя утилиту последовательно обойти целевой каталог и переназначить группу каждому найденному внутри узлу.
Запустим пакетную модификацию прав в пользу группы devteam с помощью команды sudo chgrp -R devteam /tmp/project_dir.

sudo chgrp -R devteam /tmp/project_dir

Финальный аудит структуры через ls -lR /tmp/project_dir наглядно подтверждает: новая группа присвоена как родительской папке, так и файлам на всех глубинах вложенности.

ls -lR /tmp/project_dir

Копирование параметров владения из файла-образца (–reference)

В практических сценариях бывает удобнее не вводить имя группы вручную, а продублировать права с уже существующего настроенного файла. Создадим новый объект для такого эксперимента: touch /tmp/target_file.txt.

touch /tmp/target_file.txt

Сопоставим исходные свойства файла-эталона и нового целевого документа с помощью ls -l /tmp/sample_doc.txt /tmp/target_file.txt.

ls -l /tmp/sample_doc.txt /tmp/target_file.txt

Опция --reference позволяет применить группу файла-источника к указанным целевым файлам без явного указания названия роли.
Выполним команду sudo chgrp --reference=/tmp/sample_doc.txt /tmp/target_file.txt, скопировав групповые параметры из /tmp/sample_doc.txt в /tmp/target_file.txt.

sudo chgrp –reference=/tmp/sample_doc.txt /tmp/target_file.txt

Сделаем контрольную проверку файла через ls -l /tmp/target_file.txt — теперь он корректно принадлежит группе devteam.

ls -l /tmp/target_file.txt

Детализация вывода (-v, -c) и специфика символических ссылок (-h)

Для дальнейших экспериментов зарегистрируем в ОС еще одну рабочую группу вызовом sudo groupadd -f qateam.

sudo groupadd -f qateam

Создадим мягкую ссылку на тестовый документ, воспользовавшись инструкцией ln -sf /tmp/sample_doc.txt /tmp/sample_link.

ln -sf /tmp/sample_doc.txt /tmp/sample_link

Оценим базовые атрибуты самого линка с помощью команды ls -l /tmp/sample_link.

ls -l /tmp/sample_link

Ключ -v полезен при отладке и в автоматических скриптах: он заставляет утилиту подробно комментировать каждый шаг.
Передадим права на документ группе qateam и запросим лог изменений командой sudo chgrp -v qateam /tmp/sample_doc.txt.

sudo chgrp -v qateam /tmp/sample_doc.txt

По умолчанию операции над символическими ссылками затрагивают файл-источник, а не сам указатель. Ключ -h меняет это поведение, адресуя операцию непосредственно файлу симлинка.
Сменим группу ярлыка на qateam без воздействия на оригинал: sudo chgrp -h qateam /tmp/sample_link.

sudo chgrp -h qateam /tmp/sample_link

Убедимся, что группа обновилась именно у ссылки, проверив запись через ls -l /tmp/sample_link.

ls -l /tmp/sample_link

Рассмотренные приемы работы с chgrp обеспечивают точный контроль над групповыми правами в Ubuntu. Грамотное комбинирование рекурсивных флагов, ссылочных параметров и ключей детального протоколирования помогает безопасно выстраивать совместную работу на Linux-серверах.