概要
ファイルやディレクトリの「所有グループ」を変更することに特化したコマンドです。
chown コマンドでもグループの変更は可能ですが、chgrp は構文がシンプルで、特に「プロジェクトメンバー内での共有設定」や「Webサーバーの書き込み権限設定」など、グループ権限のみを操作したい場面で利用されます。
一般ユーザーであっても、自分が所属しているグループへの変更であれば、管理者権限(sudo)なしで実行できる場合があります。
仕様(引数・オプション)
構文
chgrp [オプション] グループ名 ファイル名
主な引数・オプション
| オプション | 説明 |
-R | 指定したディレクトリ以下の全ファイル・ディレクトリを再帰的に変更します(Recursive)。 |
-c | 実際に変更が行われた場合のみ、詳細を表示します(changes)。 |
-f | エラーメッセージ(権限不足やファイル不在など)を表示しません(force/silent)。 |
-h | シンボリックリンクの場合、リンク先ではなくリンクファイル自体のグループを変更します(no-dereference)。 |
--dereference | シンボリックリンクの場合、リンク先のファイルのグループを変更します(デフォルトの挙動)。 |
--reference=<ファイル> | 指定したファイルと同じグループ設定を適用します。 |
基本の使い方
ファイルの所有グループを指定したグループに変更します。
コマンド
# sales_report.txt のグループを 'marketing' に変更
chgrp marketing sales_report.txt
# 確認
ls -l sales_report.txt
実行結果
-rw-rw-r-- 1 user marketing 2048 Jan 20 11:00 sales_report.txt
※ グループ部分が marketing に変わります。
実践コマンド
ディレクトリごと再帰的に変更する
Webサーバーの公開ディレクトリや、チーム共有フォルダのセットアップで最も頻繁に使用されるコマンドです。
# /var/www/html 以下の全ファイルのグループを 'www-data' に変更
sudo chgrp -R www-data /var/www/html
(出力なし)
変更されたファイルだけを表示する
-R と組み合わせて実行する際、大量のファイルの中で「実際に変更が必要だったファイル」だけをログに出力します。すでに正しいグループになっているファイルは無視されます。
# 変更が発生した場合のみ表示
sudo chgrp -Rc developers ./project_src/
changed group of './project_src/new_module.py' from root to developers
changed group of './project_src/config/settings.json' from user to developers
別のファイルのグループ設定をコピーする
グループ名を文字列で指定するのではなく、「このファイルと同じにして」という指定方法です。スクリプト内での自動化に適しています。
# template.conf のグループ情報を new_config.conf に適用
chgrp --reference=template.conf new_config.conf
カスタムポイント
- GIDでの指定: グループ名の代わりに、数値のグループID(GID)を指定して実行することも可能です(例:
chgrp 1001 file.txt)。 - 所有者の変更:
chgrpはグループ専用です。所有者(ユーザー)も変更したい場合はchownコマンドを使用してください(chown user:group fileで両方変更可能です)。
注意点
- 権限の制約:一般ユーザーが chgrp を実行できるのは、「自分が所有しているファイル」かつ「変更先のグループに自分が所属している場合」に限られます。それ以外(他人のファイルを変更する場合や、自分が所属していない管理グループへ変更する場合など)は sudo が必要です。
- シンボリックリンクの挙動:デフォルト(–dereference)では、シンボリックリンクに対して実行すると「リンク先のファイル」のグループが変更されます。リンクそのものの属性を変えたい場合は -h オプションを忘れないようにしてください。
- -R の使用注意:システムディレクトリに対して誤って再帰的な変更を行うと、システムが正常に動作しなくなる恐れがあります。コマンド実行前にパスを十分に確認してください。
応用
findコマンドで見つけた特定のファイルのグループを一括変更する
ディレクトリ全体ではなく、特定の条件(拡張子や現在のグループなど)に合致するファイルだけを対象に変更を行います。
# カレントディレクトリ以下の .log ファイルのみ、グループを 'admin' に変更
find . -name "*.log" -exec chgrp admin {} +
まとめ
chgrpコマンドは、Linuxにおける共同作業環境を維持するために不可欠なツールです。複数人でファイルを編集するプロジェクトや、WebサーバーとFTPユーザーでファイルを共有するような構成において、適切なグループ権限を割り当てることで、「権限エラーでファイルが開けない」といったトラブルを防ぐことができます。chownコマンドでも同様の操作は可能ですが、グループ操作のみに焦点を当てたchgrpを使用することで、誤って所有ユーザーまで書き換えてしまうリスクを回避し、より安全な運用が可能になります。
