Ubuntuのchgrpコマンド徹底解説:ファイル所有グループの変更実践

概要

Linuxシステムにおけるファイルやディレクトリの所有グループを安全かつ柔軟に管理するための chgrp コマンドについて解説します。基本構文をはじめ、実務で頻出する再帰処理(-R)、別ファイルの設定を複製する参照オプション(--reference)、さらにはシンボリックリンクの扱いまで、実践的なコマンド例を交えて体系的にまとめました。

chgrpの基礎知識と単一ファイルの所有グループ変更

実習環境を整えるため、まずは sudo groupadd -f devteam を実行してテスト用の新規グループ devteam を定義します。

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 は、Linux上でファイルやディレクトリに紐づく所有グループを切り替えるための標準コマンドです。
sudo chgrp devteam /tmp/sample_doc.txt を実行することで、対象ファイルのグループ所有権を devteam へと更新します。
⚙️ [押さえておきたい主要オプション]

-c : 所有グループに実際の変更が生じたファイルのみをターミナルに表示します。
-f : パーミッション不足等で変更に失敗した場合でも、大半のエラーメッセージ出力を抑止します。
-v : 変更の有無にかかわらず、処理された全ファイルの状態を詳細に出力します。
-R : 指定ディレクトリ配下の全サブディレクトリおよびファイルに対して再帰的に変更を適用します。
--reference=RFILE : グループ名を直接指定せず、基準ファイル(RFILE)のグループ所有権をそのまま複製します。

sudo chgrp devteam /tmp/sample_doc.txt

グループの更新が正しく反映されたかを確認するため、再び 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

chgrp に -R オプションを付与すると、対象ディレクトリだけでなく配下のすべての階層に含まれるファイルやフォルダに対して再帰的にグループ所有権を適用できます。
sudo chgrp -R devteam /tmp/project_dir を実行し、ツリー構造内の全アイテムをまとめて devteam グループへ移行します。

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

対象ファイルの所有グループが参照元と同じ devteam に揃えられたことを、ls -l /tmp/target_file.txt で確認します。

ls -l /tmp/target_file.txt

ログ詳細出力(-v, -c)とシンボリックリンク自体の制御(-h)

検証用の新たなグループとして、sudo groupadd -f qateam を実行して 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 オプションが有効です。
sudo chgrp -v qateam /tmp/sample_doc.txt を実行し、qateam への切り替えログをターミナルで確認してみましょう。

sudo chgrp -v qateam /tmp/sample_doc.txt

標準の挙動ではシンボリックリンクを処理すると参照先の実体ファイルが変更されますが、-h オプションを指定すればリンクファイルそのもののグループ属性を変更対象にできます。
sudo chgrp -h qateam /tmp/sample_link を実行し、リンク自体の所有グループを qateam へ変更します。

sudo chgrp -h qateam /tmp/sample_link

リンク本体のグループ属性が正しく qateam に更新されたことを ls -l /tmp/sample_link で検証します。

ls -l /tmp/sample_link

本記事では、Ubuntu環境でファイルやディレクトリのグループ所有権を適切に管理するための chgrp コマンドの使い方を紹介しました。
業務での権限管理や共同開発環境の整備にあたり、本稿の実践例やオプション設定を役立ててみてください。