この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:T
更新日時:2026-06-11 07:10:02

タイトル: chgrp ファイル/ディレクトリのグループ情報の変更
SEOタイトル: Linux chgrp コマンド完全ガイド

この記事の要点
  • chgrp はファイル/ディレクトリの所有グループを変更するコマンド
  • 基本: chgrp グループ名 ファイル。例: chgrp developers app.log
  • 再帰: -R でディレクトリ配下も一括変更。chgrp -R www-data /var/www
  • シンボリックリンク: -hリンク自体を変更 (既定はリンク先)
  • 同等機能: chown :グループ ファイル (ユーザー省略でグループのみ変更)

chgrp の基本

chgrp (change group) はファイルやディレクトリの所有グループを変更する Linux コマンドです。実行には root 権限、または現在のファイル所有者かつ変更先グループに所属している必要があります。

# 基本: ファイルの所有グループを developers に変更
chgrp developers app.log

# 複数ファイルを一度に
chgrp developers file1.txt file2.txt file3.txt

# ワイルドカード
chgrp developers /var/log/*.log

# 確認
ls -l app.log
# -rw-r--r-- 1 alice developers 1234 Jun 11 10:00 app.log
#               ↑              ↑
#           ユーザー        グループ

主なオプション

オプション意味
-R / --recursiveディレクトリ配下を再帰的にchgrp -R www /var/www
-h / --no-dereferenceシンボリックリンク自体を対象にchgrp -h root mylink
-v / --verbose処理ごとにメッセージ表示chgrp -v dev *.txt
-c / --changes変更があったときのみ表示chgrp -c dev *.txt
-f / --silentエラーメッセージ抑制chgrp -f dev *.txt
--reference=FILEFILE と同じグループに変更chgrp --reference=src dest
-H引数のシンボリックリンクは辿る(-R と併用)
-L全シンボリックリンクを辿る(-R と併用、危険)
-Pシンボリックリンクは辿らない (既定)(-R と併用)

再帰的に変更 (-R)

# /var/www 以下を全て www-data グループに
sudo chgrp -R www-data /var/www

# 詳細表示
sudo chgrp -Rv www-data /var/www
# changed group of '/var/www' from root to www-data
# changed group of '/var/www/index.html' from root to www-data
# ...

# シンボリックリンクの扱い:
#   -R -P : リンクは辿らない (既定、安全)
#   -R -L : 全リンクを辿る (無限ループ注意)
#   -R -H : コマンドライン引数のリンクのみ辿る

シンボリックリンクの扱い

シンボリックリンクへの chgrp はデフォルトでリンク先のファイルを変更します。リンク自体を変更したい場合は -h

# 準備
echo "data" > target.txt
ln -s target.txt mylink

ls -l target.txt mylink
# -rw-r--r-- 1 alice alice 5 ... target.txt
# lrwxrwxrwx 1 alice alice 10 ... mylink -> target.txt

# 既定: リンク先の target.txt のグループが変わる
chgrp developers mylink
ls -l target.txt mylink
# -rw-r--r-- 1 alice developers 5 ... target.txt     ← 変わる
# lrwxrwxrwx 1 alice alice 10 ... mylink             ← 変わらない

# -h: リンク自体のグループ変更
chgrp -h developers mylink
ls -l mylink
# lrwxrwxrwx 1 alice developers 10 ... mylink        ← 変わる

グループ名と GID

グループ名の代わりにGID (グループ ID) でも指定できます。/etc/group でマッピングを管理します。

# /etc/group の例
cat /etc/group
# root:x:0:
# wheel:x:10:alice
# developers:x:1000:alice,bob
# www-data:x:33:

# グループ名で指定
chgrp developers file.txt

# GID で指定 (頭に + を付ける推奨)
chgrp 1000 file.txt
chgrp +1000 file.txt

# 現在のグループを確認
ls -l file.txt
stat -c '%G' file.txt   # グループ名
stat -c '%g' file.txt   # GID
stat -c '%U %G %A' file.txt   # ユーザー、グループ、パーミッション

所有グループを変更できる権限

状況変更可否
root が実行常に可能
ファイル所有者かつ変更先グループに所属可能
ファイル所有者だが変更先グループに非所属不可
第三者不可
# 自分が所属するグループを確認
groups
# alice : alice developers wheel

# alice 所有のファイルを developers グループに → OK (alice は developers 所属)
chgrp developers myfile.txt

# 自分が所属しないグループには変更不可
chgrp other_group myfile.txt
# chgrp: changing group of 'myfile.txt': Operation not permitted

# root なら可能
sudo chgrp other_group myfile.txt

chown でも同等

chown (change owner) でも、ユーザー部分を省略して :グループ と書けばグループのみ変更できます。実用上は chown の方がよく使われます。

# 以下は同じ意味
chgrp developers file.txt
chown :developers file.txt
chown .developers file.txt          # 古い書き方

# chown はユーザーとグループを同時変更できる
sudo chown alice:developers file.txt

# 再帰でユーザーとグループ両方
sudo chown -R www-data:www-data /var/www

典型的な使用例

Webサーバのドキュメントルート

# Apache / Nginx のグループ (www-data / nginx) に統一
sudo chgrp -R www-data /var/www/html
sudo chmod -R g+r /var/www/html
sudo chmod -R g+w /var/www/html/storage   # 書き込み必要なディレクトリのみ

# ★ Laravel の場合
sudo chgrp -R www-data /var/www/laravel-app
sudo chmod -R 775 /var/www/laravel-app/storage
sudo chmod -R 775 /var/www/laravel-app/bootstrap/cache

共有作業ディレクトリ

# 開発チームで共有するディレクトリ
sudo mkdir /srv/shared
sudo chgrp developers /srv/shared
sudo chmod 2775 /srv/shared
#         ↑↑ Set GID bit (2): 作成ファイルが親と同じグループになる

# 新規ファイルを作ると自動で developers グループに
touch /srv/shared/test.txt
ls -l /srv/shared/test.txt
# -rw-r--r-- 1 alice developers ... test.txt   ← 自動で developers

ログファイルのアクセス権付与

# adm グループに syslog を読ませる
sudo chgrp adm /var/log/syslog
sudo chmod g+r /var/log/syslog

# adm グループのメンバーは sudo なしで読める
groups alice
# alice : alice adm wheel
cat /var/log/syslog   # OK

確認系コマンド

# 所有グループを確認
ls -l file.txt                  # 詳細形式
ls -lg file.txt                 # GNU 拡張
stat file.txt                   # 全メタ情報
stat -c %G file.txt             # グループ名のみ
stat -c %g file.txt             # GID のみ
stat -c "%U:%G %a %n" file.txt  # フォーマット

# グループに属するメンバー
getent group developers
# developers:x:1000:alice,bob

# 自分が所属するグループ
groups
id
id -gn      # プライマリグループ名
id -Gn      # 全グループ

関連コマンド

コマンド用途
chmodパーミッション (rwx) 変更
chown所有者 / グループ変更
chgrp所有グループのみ変更
groupadd新規グループ作成
groupdelグループ削除
usermod -aG グループ ユーザーユーザーをグループに追加
gpasswd -d ユーザー グループユーザーをグループから削除
getfacl / setfaclACL (詳細権限)

SELinux / AppArmor との関係

chgrp は伝統的な UNIX パーミッション (DAC) を操作しますが、SELinux / AppArmor のようなMAC (強制アクセス制御)は別レイヤーで動きます。グループを正しく設定しても SELinux ラベルが間違っていればアクセス拒否されます。

# SELinux のコンテキストを確認
ls -lZ /var/www/html/index.html
# -rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 ... index.html
#                       ↑ SELinux ラベル

# ラベルを修正
sudo restorecon -Rv /var/www/html
sudo chcon -t httpd_sys_content_t /var/www/html/index.html

# AppArmor は /etc/apparmor.d/ のプロファイルで制御
sudo aa-status

FAQ

Q: chgrpchown :group、どちらを使うべき?
A: 機能は同じ。スクリプトで意図を明示したい場合は chgrp、ユーザーとグループ両方変えるなら chown user:group

Q: 大量のファイルを変更したら遅い
A: -R でも数百万ファイルは時間かかります。find ... -exec chgrp ... + または xargs で並列化可能。

Q: シンボリックリンクのリンク先を変えたくない
A: 必ず -h を付ける。chgrp -h newgroup mylink-R と組み合わせるときは -RhP