chmodが「誰が読み書き実行できるか」という権限を決めるコマンドなら、chownとchgrpは「そのファイルが誰のものか(所有者・所有グループ)」を決めるコマンドです。ls -lで見えるrw-r--r-- root root file.txtの、太字部分(所有者・グループ)を変更します。デプロイ後のファイル所有者調整や、Webサーバー用のディレクトリ権限設定などで頻繁に使います。
この記事では、実機のLinux(WSLのDebian)でchown・chgrpの基本と、一般ユーザーには扱えない操作があるという重要な制約を、実際に権限エラーを起こしながら整理します。「chownしたらOperation not permittedと言われた」というのは、権限まわりで非常によくあるつまずきです。
chown ユーザー:グループ ファイルで、所有者とグループを同時に変更できます。chown ユーザー(コロンなし)は所有者だけ、chown :グループはグループだけ変更します。chgrp グループ ファイルは、グループだけを変える専用コマンドです。- ディレクトリごと変更するには
-R(再帰)を付けます。 - 所有者の変更は基本的にroot(管理者)権限が必要です。
- 一般ユーザーは、自分のファイルでも「所属していないグループ」には変更できません。
権限の読み方はchmodとパーミッションの記事、コマンド実行時の権限を確認するプロセス管理はps・killもあわせて参考になります。
chownの基本:所有者とグループを同時に変更
chownの基本形はchown 所有者:グループ ファイルです。ls -lで見える2つの名前(所有者・グループ)を、一度に書き換えられます。
# 初期状態を確認 ls -l f.txt # -rw-r--r-- 1 root root 0 Jul 9 09:14 f.txt # 所有者とグループを同時に変更 sudo chown testuser2:testgroup2 f.txt ls -l f.txt # -rw-r--r-- 1 testuser2 testgroup2 0 Jul 9 09:14 f.txt
実機でも、chown testuser2:testgroup2 f.txtを実行すると、ls -lの表示が所有者・グループとも指定どおりに書き換わりました。ユーザー名:グループ名のコロン区切りが基本の書式です。実運用では、Webサーバーが読めるように所有者をwww-dataに変える、デプロイユーザーの所有物として統一する、といった場面でよく使われます。
所有者だけ・グループだけを変更する
コロンの位置を工夫すると、所有者だけ、あるいはグループだけを変更できます。片方を省略すれば、もう片方は変更されずそのまま残ります。
# ユーザーのみ変更(コロンなし) → グループは変わらない chown root f.txt ls -l f.txt # -rw-r--r-- 1 root testgroup2 0 ... ← グループは testgroup2 のまま # グループのみ変更(コロン + グループ名) → 所有者は変わらない chown :root f.txt ls -l f.txt # -rw-r--r-- 1 root root 0 ... # グループのみの変更は chgrp でも同じことができる chgrp testgroup2 f.txt ls -l f.txt # -rw-r--r-- 1 root testgroup2 0 ...
実機で確認したところ、chown root f.txt(コロンなし)は所有者だけをrootに変更し、グループはtestgroup2のまま残りました。逆にchown :root f.txt(コロン+グループ名)はグループだけを変更しました。そしてchgrp testgroup2 f.txtという専用コマンドでも、同じくグループだけの変更ができました。つまりchown :グループ名とchgrp グループ名は同じ結果になります。「グループだけ変えたい」という意図が明確なときは、chgrpを使うほうがコマンドの意味が伝わりやすく、タイプミス(コロンの付け忘れ)も防げます。
-Rでディレクトリごと再帰的に変更
ディレクトリとその中身すべての所有者・グループを変えるには、cp・rmと同じ-R(再帰)を付けます。
mkdir -p sub/deep touch sub/a.txt sub/deep/b.txt # -R を付けて、ディレクトリの中身すべてを変更 chown -R testuser2:testgroup2 sub ls -lR sub # sub/a.txt … testuser2 testgroup2 # sub/deep/b.txt … testuser2 testgroup2(サブディレクトリの中身まで反映)
実機でも、chown -R testuser2:testgroup2 subを実行すると、sub直下のファイルだけでなくsub/deep/のさらに深い階層のファイルまで、すべて所有者・グループが変更されました。Webサイトのディレクトリ全体の所有者をまとめて揃えたいときなど、-Rを忘れると一部のファイルだけ古い所有者のまま残ってしまうので注意してください。
【最重要】一般ユーザーはchownできない
ここがchownで最もつまずくポイントです。ファイルの所有者を変更できるのは、基本的にroot(管理者)権限を持つユーザーだけです。自分が持っているファイルであっても、一般ユーザーの権限では所有者を他人に変更できません。
# 一般ユーザー(testuser2)で、自分のファイルの所有者を変えようとすると… chown root f.txt # chown: changing ownership of 'f.txt': Operation not permitted # sudo を付ければ管理者権限で実行できる sudo chown root f.txt
実機で、一般ユーザー権限(setprivで非rootに切り替え)から自分のファイルの所有者を変更しようとしたところ、chown: changing ownership of 'f.txt': Operation not permittedと拒否されました。これは、もし一般ユーザーが自由に所有者を変更できてしまうと、「悪いことをしたファイルを他人の持ち物に見せかける」といった不正が可能になってしまうためのセキュリティ上の制約です。所有者の変更にはroot権限(sudo)が必要だと覚えておいてください。「自分のファイルなのにchownできない」と焦ったときは、この仕様が原因です。
【重要】グループ変更にも制約がある
グループの変更(chgrp、またはchown :グループ)は、所有者の変更よりは緩やかですが、一般ユーザーは「自分が所属しているグループ」にしか変更できません。
# 自分が所属しているグループ(mygroup)への変更は成功する chgrp mygroup myfile.txt ls -l myfile.txt # -rw-r--r-- 1 testuser3 mygroup 0 ... ← 成功 # 所属していないグループ(othergroup)への変更は拒否される chgrp othergroup myfile.txt # chgrp: changing group of 'myfile.txt': Operation not permitted
実機でも、ユーザーが所属しているグループ(mygroup)への変更は成功しましたが、所属していないグループ(othergroup)への変更はOperation not permittedで拒否されました。これは、自分の権限のないグループへファイルを勝手に移せてしまうと、そのグループのメンバーに意図せずアクセス権を与えてしまうためです。自分の所属グループはgroupsコマンドやidコマンドで確認できます。「chgrpしたのに権限エラーになる」ときは、そのグループに自分が入っているかを確認してください。
主な書き方一覧
chown・chgrpの要点をまとめます。
| 書き方 | 働き |
|---|---|
chown user:group ファイル |
所有者とグループを同時に変更 |
chown user ファイル |
所有者だけ変更(グループは維持) |
chown :group ファイル |
グループだけ変更(chgrpと同じ) |
chgrp group ファイル |
グループ専用の変更コマンド |
-R |
ディレクトリの中身も再帰的に変更 |
id / groups |
自分の所属ユーザー・グループを確認 |
よくある失敗
Operation not permittedで所有者を変更できない
所有者の変更にはroot権限が必要です。sudo chownを使います。
グループ変更もOperation not permittedになる
自分が所属していないグループには変更できません。groupsで所属を確認します。
ディレクトリの中身が変更されない
-Rを忘れると、そのディレクトリ自体しか変わりません。
コロンの位置を間違える
chown user:group(両方)とchown :group(グループのみ)を混同しないよう注意します。
chownとchmodを混同する
chownは「誰のものか」、chmodは「誰が何をできるか」です。役割が違います。
よくある質問
chownは所有者とグループの両方(chown user:group)を変更できる汎用コマンドで、chgrpはグループだけを変更する専用コマンドです。chown :group ファイルとchgrp group ファイルは同じ結果になります。実機でも両方の書き方で同じ変更ができることを確認しています。sudo chown ...のように管理者権限で実行してください。groupsコマンドで自分の所属グループを確認してください。-R(再帰)オプションを付けます。chown -R user:group ディレクトリとすると、サブディレクトリの奥深くまで含めて、すべてのファイルの所有者・グループが変更されます。付け忘れると、ディレクトリ自体しか変わらず中身は元のままになります。chownは「そのファイルが誰のものか(所有者・グループ)」を決め、chmodは「所有者・グループ・その他がそれぞれ何をできるか(読み書き実行の権限)」を決めます。役割が異なるため、権限の問題を調べるときはこの2つをセットで確認するのが基本です。まとめ
chown user:groupで所有者とグループを同時変更、片方だけの変更も可能です。chgrpはグループ専用。chown :groupと同じ結果になります。- ディレクトリごとの変更には
-Rが必要です。 - 所有者の変更にはroot権限が必要で、一般ユーザーは
Operation not permittedになります。 - グループ変更も、自分が所属しているグループにしかできません。
chown・chgrpは、chmodとセットで理解しておきたい権限管理の基本コマンドです。「所有者の変更にはroot権限が要る」「グループも所属先にしか変えられない」という2つの制約を知っておけば、Operation not permittedに出会っても慌てずに対処できます。
- grep(文字列検索)
- find(ファイル検索)
- sed(置換・行編集)
- awk(列抽出・集計)
- chmod(パーミッション)
- tar(圧縮・解凍)
- リダイレクトとパイプ
- ps・kill(プロセス管理)
- 環境変数とPATH
- ln(シンボリックリンク)
- cp・mv・rm(コピー/移動/削除)
- history(コマンド履歴)
- curl(HTTP通信・API)
- jq(JSON処理)
- vim(基本操作・終了方法)
- cron・crontab(定期実行)
- sort・uniq・wc(並べ替え/集計)
- xargs(一括処理)
- chown・chgrp(所有者/グループ変更)
- diff(ファイル比較)
- du・df(ディスク使用量)
- よく使うコマンドまとめ
- cd(ディレクトリ移動)

