今回はLinuxコマンドであるchownコマンドについて解説します
chownコマンドは、ファイルやディレクトリの所有者(ユーザー)と所有グループを変更するコマンドです
Webサーバーの公開ディレクトリの所有者をまとめて変えたり、sudoで作ってしまったファイルを自分のものに戻したりと、サーバー運用で必ず出てくるコマンドなので、ぜひ覚えて帰ってくださいね!
※注 本文の△は半角スペースに置き換えてください。わかりやすくするために△で記述してます
chownコマンドとは??
chownコマンドは、ファイルやディレクトリの所有者と所有グループを変更するコマンドです
名前は「change owner(所有者を変更する)」の略です
Linuxのファイルには必ず「所有者」と「グループ」が設定されていて、ls△-lの3列目と4列目で確認できます
この所有者・グループと、chmodで設定する権限(rwx)の組み合わせで、誰がファイルを読み書きできるかが決まります
所有者を他のユーザーに変更できるのはroot(管理者)だけなので、実際の作業ではsudoを付けて実行することがほとんどです
この記事の実行結果は、GNU coreutils 9.4のchown(Ubuntu 24.04)を一般ユーザー(user)で実行して確認しています(sudoを付けたコマンドだけroot権限で実行しています)
chownコマンドの主なオプション
chownコマンドの主なオプションは次のとおりです
| オプション | 意味 |
|---|---|
| -R (–recursive) | ディレクトリの中のファイルやサブディレクトリも含めて、まとめて所有者・グループを変更するオプション |
| -v (–verbose) | 処理したファイルごとに、変更の内容をメッセージで表示するオプション |
| -c (–changes) | -vと似ていますが、実際に変更があったファイルだけをメッセージで表示するオプション |
| -f (–silent, –quiet) | ほとんどのエラーメッセージを表示しないようにするオプション |
| -h (–no-dereference) | シンボリックリンクの場合に、リンク先のファイルではなく、シンボリックリンクそのものの所有者を変更するオプション |
| –reference | 所有者とグループを直接書く代わりに、別のファイルと同じ所有者・グループに合わせるオプション |
| –from | 今の所有者・グループが指定したものと一致するファイルだけを変更するオプション |
ここからは、テスト用のディレクトリchown-testの中に練習用ファイルを作って説明します
所有者の変更にはroot権限が必要なので、この記事ではsudoを使います
練習用に「webteam」というグループを作るので、自分で管理しているテスト用の環境(VPSや仮想マシンなど)で試してください
作ったグループは、記事の最後の「後片付け」で削除します
mkdir△chown-test
cd△chown-test
export△LC_ALL=C
# メッセージを英語(ストレートの引用符)で表示するための設定です
# 練習用のグループwebteamを作る(システムにグループが1つ追加されます)
sudo△groupadd△webteam
getent△group△webteam△|△cut△-d:△-f1
実行結果:
webteam
# 練習用のファイルとディレクトリを作る
printf△”meeting△notes\n”△>△memo.txt
printf△”sales△report△2026-11\n”△>△report.txt
printf△”host=localhost\nport=8080\n”△>△app.conf
printf△”reference△file\n”△>△ref.txt
mkdir△-p△site/css△site/images
printf△”<h1>Welcome</h1>\n”△>△site/index.html
printf△”body△{△color:△#333;△}\n”△>△site/css/style.css
printf△”dummy△image\n”△>△site/images/logo.png
touch△-d△”2026-11-01△10:00″△memo.txt△report.txt△app.conf△ref.txt△site/index.html△site/css/style.css△site/images/logo.png△site/css△site/images△site
# 作成したディレクトリの構成を確認する
ls△-lR
実行結果:
.:
total 20
-rw-rw-r– 1 user user 25 Nov 1 10:00 app.conf
-rw-rw-r– 1 user user 14 Nov 1 10:00 memo.txt
-rw-rw-r– 1 user user 15 Nov 1 10:00 ref.txt
-rw-rw-r– 1 user user 21 Nov 1 10:00 report.txt
drwxrwxr-x 4 user user 4096 Nov 1 10:00 site
./site:
total 12
drwxrwxr-x 2 user user 4096 Nov 1 10:00 css
drwxrwxr-x 2 user user 4096 Nov 1 10:00 images
-rw-rw-r– 1 user user 17 Nov 1 10:00 index.html
./site/css:
total 4
-rw-rw-r– 1 user user 22 Nov 1 10:00 style.css
./site/images:
total 4
-rw-rw-r– 1 user user 12 Nov 1 10:00 logo.png
# ファイルの中身を確認する
cat△memo.txt△report.txt△app.conf△ref.txt
実行結果:
meeting notes
sales report 2026-11
host=localhost
port=8080
reference file
cat△site/index.html△site/css/style.css
実行結果:
<h1>Welcome</h1>
body { color: #333; }
# 自分のユーザー名・主グループ・所属しているグループを確認する
id△-un
実行結果:
user
id△-gn
実行結果:
user
id△-Gn
実行結果:
user
# userはグループuserにだけ所属していて、webteamには所属していません
以降のコマンドは、すべてchown-testの中で実行します
ファイルの日時は、実行日によって結果が変わらないようにtouch△-dで固定しています
export△LC_ALL=Cを実行しない日本語環境では、メッセージが日本語で表示されます
-R (–recursive)
ディレクトリの中のファイルやサブディレクトリも含めて、まとめて所有者・グループを変更するオプションです
Webサイトのファイル一式など、ディレクトリごと所有者を変えるときに使います
# siteディレクトリと中身すべてのグループをwebteamにする
sudo△chown△-R△:webteam△site
ls△-lR△site
実行結果:
site:
total 12
drwxrwxr-x 2 user webteam 4096 Nov 1 10:00 css
drwxrwxr-x 2 user webteam 4096 Nov 1 10:00 images
-rw-rw-r– 1 user webteam 17 Nov 1 10:00 index.html
site/css:
total 4
-rw-rw-r– 1 user webteam 22 Nov 1 10:00 style.css
site/images:
total 4
-rw-rw-r– 1 user webteam 12 Nov 1 10:00 logo.png
# siteの中のファイルとディレクトリすべてのグループがwebteamになっています
# ※sudoを付けたchownはroot権限で実行されます。必ずテスト用ディレクトリの中のファイルだけで試してください
-v (–verbose)
処理したファイルごとに、変更の内容をメッセージで表示するオプションです
すでに指定した所有者になっていて変更がなかったファイルも、「retained(そのまま)」と表示されます
sudo△chown△-v△root△memo.txt
実行結果:
changed ownership of ‘memo.txt’ from user to root
# 所有者がuserからrootに変わったことが表示されます
# もう一度同じコマンドを実行する
sudo△chown△-v△root△memo.txt
実行結果:
ownership of ‘memo.txt’ retained as root
# すでにrootなので、変更されずにそのままだと表示されます
-c (–changes)
-vと似ていますが、実際に変更があったファイルだけをメッセージで表示するオプションです
たくさんのファイルを処理するときに、どれが変わったのかだけを知りたい場合に便利です
sudo△chown△-c△root△memo.txt△report.txt
実行結果:
changed ownership of ‘report.txt’ from user to root
# memo.txtはすでにrootなので表示されず、変更されたreport.txtだけが表示されます
# 結果を確認する
ls△-l△memo.txt△report.txt
実行結果:
-rw-rw-r– 1 root user 14 Nov 1 10:00 memo.txt
-rw-rw-r– 1 root user 21 Nov 1 10:00 report.txt
-f (–silent, –quiet)
ほとんどのエラーメッセージを表示しないようにするオプションです
メッセージが出なくても変更に失敗したことは終了ステータス($?)でわかるので、スクリプトの中で使うときは注意しましょう
# sudoなしでuserのファイルの所有者をrootに変えようとする(失敗する)
chown△-f△root△app.conf
echo△$?
実行結果:
1
# エラーメッセージは出ませんが、終了ステータスが1(失敗)になっています
-h (–no-dereference)
シンボリックリンクの場合に、リンク先のファイルではなく、シンボリックリンクそのものの所有者を変更するオプションです
-hを付けないと、シンボリックリンクを指定してもリンク先のファイルの所有者が変わります
# 事前準備:app.confへのシンボリックリンクを作る
ln△-s△app.conf△app.link
touch△-h△-d△”2026-11-01△10:00″△app.link
ls△-l△app.conf△app.link
実行結果:
-rw-rw-r– 1 user user 25 Nov 1 10:00 app.conf
lrwxrwxrwx 1 user user 8 Nov 1 10:00 app.link -> app.conf
# -hなしでシンボリックリンクを指定する
sudo△chown△root△app.link
ls△-l△app.conf△app.link
実行結果:
-rw-rw-r– 1 root user 25 Nov 1 10:00 app.conf
lrwxrwxrwx 1 user user 8 Nov 1 10:00 app.link -> app.conf
# リンク先のapp.confの所有者がrootに変わり、app.link自体はuserのままです
# app.confの所有者を元に戻してから、-hありで実行する
sudo△chown△user△app.conf
sudo△chown△-h△root△app.link
ls△-l△app.conf△app.link
実行結果:
-rw-rw-r– 1 user user 25 Nov 1 10:00 app.conf
lrwxrwxrwx 1 root user 8 Nov 1 10:00 app.link -> app.conf
# 今度はapp.link自体の所有者がrootに変わり、app.confはuserのままです
# 練習用のシンボリックリンクを削除する
rm△app.link
–reference
所有者とグループを直接書く代わりに、別のファイルと同じ所有者・グループに合わせるオプションです
GNU版のchownで使えるオプションです
# 事前準備:見本にするref.txtの所有者とグループを変える
sudo△chown△root:webteam△ref.txt
# app.confの所有者とグループをref.txtと同じにする
sudo△chown△–reference=ref.txt△app.conf
ls△-l△ref.txt△app.conf
実行結果:
-rw-rw-r– 1 root webteam 25 Nov 1 10:00 app.conf
-rw-rw-r– 1 root webteam 15 Nov 1 10:00 ref.txt
# app.confもroot:webteamになりました
–from
今の所有者・グループが指定したものと一致するファイルだけを変更するオプションです
「–from=所有者:グループ」の形で書き、どちらかを省略すると省略した側はチェックしません(GNU版のオプションです)
# 今はapp.confとref.txtがroot:webteam、memo.txtがroot:userになっています
# 所有者がrootでグループがwebteamのファイルだけをuser:userに戻す
sudo△chown△-c△–from=root:webteam△user:user△app.conf△memo.txt△ref.txt
実行結果:
changed ownership of ‘app.conf’ from root:webteam to user:user
changed ownership of ‘ref.txt’ from root:webteam to user:user
ls△-l△app.conf△memo.txt△ref.txt
実行結果:
-rw-rw-r– 1 user user 25 Nov 1 10:00 app.conf
-rw-rw-r– 1 root user 14 Nov 1 10:00 memo.txt
-rw-rw-r– 1 user user 15 Nov 1 10:00 ref.txt
# memo.txtはグループがuserで条件に合わないので、変更されていません
# memo.txtとreport.txtの所有者もuserに戻しておく
sudo△chown△user△memo.txt△report.txt
-R(再帰的な変更)と組み合わせて、シンボリックリンクのたどり方を指定する-H・-L・-Pというオプションもあります
-Pが既定で、ディレクトリへのシンボリックリンクをたどりません(-Hはコマンドラインで指定したリンクだけ、-Lはすべてのリンクをたどります)
-Lを付けるとリンク先の別の場所まで変更してしまうことがあるので、特に理由がなければ既定のままにしておきましょう
基本的な使い方
chownコマンドの基本的な構文は「chown△オプション△所有者:グループ△ファイル名」です
所有者とグループの書き方によって、変更される内容が次のように変わります
「所有者」だけなら所有者だけ、「所有者:グループ」なら両方、「:グループ」ならグループだけ、「所有者:」なら所有者と、その所有者の主グループ(ログイングループ)に変わります
# 所有者だけを変更する(書き方:user)
sudo△chown△root△memo.txt
ls△-l△memo.txt
実行結果:
-rw-rw-r– 1 root user 14 Nov 1 10:00 memo.txt
# 所有者とグループを変更する(書き方:user:group)
sudo△chown△root:webteam△memo.txt
ls△-l△memo.txt
実行結果:
-rw-rw-r– 1 root webteam 14 Nov 1 10:00 memo.txt
# グループだけを変更する(書き方::group)
sudo△chown△:user△memo.txt
ls△-l△memo.txt
実行結果:
-rw-rw-r– 1 root user 14 Nov 1 10:00 memo.txt
# 所有者と、その所有者の主グループに変更する(書き方:user:)
sudo△chown△user:△memo.txt
ls△-l△memo.txt
実行結果:
-rw-rw-r– 1 user user 14 Nov 1 10:00 memo.txt
# userの主グループはuserなので、user:userに戻りました
所有者とグループの区切りには「:」を使います
古い書き方で「user.group」のように「.」で区切る例を見かけることがありますが、ユーザー名に「.」が入っている場合と区別できないため、「:」で書くようにしましょう
一般ユーザー(sudoなし)でできること・できないこと
chownは、誰が実行するかによってできることが違います
rootは所有者もグループも自由に変更できますが、一般ユーザーは所有者を変更できません
一般ユーザーができるのは、自分が所有者のファイルのグループを、自分が所属しているグループに変えることだけです
自分のファイルのグループを変更する
自分が所属しているグループは、id△-Gnで確認できます
この記事のuserはグループuserにだけ所属しているので、sudoなしで変えられるのはグループuserへの変更だけです
# 事前準備:report.txtのグループをwebteamにしておく
sudo△chown△:webteam△report.txt
ls△-l△report.txt
実行結果:
-rw-rw-r– 1 user webteam 21 Nov 1 10:00 report.txt
# 所属しているグループを確認する
id△-Gn
実行結果:
user
# sudoなしで、所属しているグループuserに変更する
chown△:user△report.txt
ls△-l△report.txt
実行結果:
-rw-rw-r– 1 user user 21 Nov 1 10:00 report.txt
# 自分が所有者で、変更先のグループに所属しているので成功します
sudoなしで他のユーザー・グループに変更しようとした場合
所有者を他のユーザーに変えようとしたり、所属していないグループに変えようとしたりすると、「Operation not permitted」というエラーになります
自分が所有者のファイルでも、所有者を手放す(他のユーザーに渡す)ことはできません
# sudoなしで所有者をrootに変更しようとする
chown△root△report.txt
実行結果:
chown: changing ownership of ‘report.txt’: Operation not permitted
# sudoなしで所属していないグループwebteamに変更しようとする
chown△:webteam△report.txt
実行結果:
chown: changing group of ‘report.txt’: Operation not permitted
# どちらも変更されていないことを確認する
ls△-l△report.txt
実行結果:
-rw-rw-r– 1 user user 21 Nov 1 10:00 report.txt
# 所有者を変更するときや、所属していないグループに変えるときは、sudoが必要です
chgrpコマンドとの違い
グループだけを変更するコマンドとして、chgrp(change group)コマンドもあります
「chgrp△グループ△ファイル名」は「chown△:グループ△ファイル名」と同じ動きで、一般ユーザーが変えられる範囲も同じです
chownは所有者とグループを1回で変更でき、chgrpはグループ専用という違いなので、どちらを使っても問題ありません
# chgrpでグループをwebteamに変更する(所属していないのでsudoが必要)
sudo△chgrp△webteam△report.txt
ls△-l△report.txt
実行結果:
-rw-rw-r– 1 user webteam 21 Nov 1 10:00 report.txt
# sudo△chown△:webteam△report.txtと同じ結果です
# 所属しているグループuserへは、chgrpでもsudoなしで戻せる
chgrp△user△report.txt
ls△-l△report.txt
実行結果:
-rw-rw-r– 1 user user 21 Nov 1 10:00 report.txt
数値のUID・GIDで指定する
所有者とグループは、名前の代わりに数値のUID(ユーザーID)・GID(グループID)でも指定できます
rootのUIDとGIDはどの環境でも0です
自分のUIDはid△-u、GIDはid△-gで確認できます(数値は環境によって違うので、結果は省略しています)
id△-u
id△-g
# UID 0・GID 0(root)を指定する
sudo△chown△0:0△memo.txt
# 名前と数値を並べて確認する
stat△-c△”%U:%G△(%u:%g)△%n”△memo.txt
実行結果:
root:root (0:0) memo.txt
# 元に戻す
sudo△chown△user:user△memo.txt
バックアップから戻したファイルや、別のサーバーからコピーしたファイルでは、ls△-lの所有者の列に名前ではなく数字が表示されることがあります
これは、そのUIDのユーザーがこのサーバーに存在しないためで、chownで正しいユーザーに変更すれば名前で表示されるようになります
-Rを使うときの注意点
-Rはディレクトリの中身すべてを一度に変更するので、対象を間違えるとシステムが動かなくなるほどの影響が出ます
例えば「sudo△chown△-R△user:user△/△var/www」のように、/の後ろに余計な半角スペースが入ると、/(システム全体)が対象になってしまいます
GNU版のchownは、rmと違って既定では/への再帰的な変更を止めません(–preserve-rootを付けたときだけ止めます)
-Rを使う前には、findで対象のファイルを確認し、パスに間違いがないかを必ず見直しましょう
# 変更前に、対象になるファイルとディレクトリを確認する
find△site
実行結果:
site
site/images
site/images/logo.png
site/index.html
site/css
site/css/style.css
# -cを付けて実行し、変更されたものを記録しておく
sudo△chown△-Rc△root△site
実行結果:
changed ownership of ‘site/images/logo.png’ from user to root
changed ownership of ‘site/images’ from user to root
changed ownership of ‘site/index.html’ from user to root
changed ownership of ‘site/css/style.css’ from user to root
changed ownership of ‘site/css’ from user to root
changed ownership of ‘site’ from user to root
# どのファイルが変わったかを残しておくと、間違えたときに元に戻しやすくなります
# ※sudoを付けたchownはroot権限で実行されます。必ずテスト用ディレクトリの中のファイルだけで試してください
システムのディレクトリ(/、/etc、/usr、/var など)に対して、sudo△chown△-Rを実行するのは絶対にやめましょう
所有者が変わると、sudoやsshが動かなくなるなど、元に戻すのがとても大変になります
chownコマンドの実践的な活用例
実際の現場でよく使われるchownコマンドの活用例をご紹介します
本番ではWebサーバーのドキュメントルート(/var/www/html など)に対して行う作業ですが、ここではテスト用ディレクトリのsiteで再現しています
Webサーバーのドキュメントルートの所有者を変更する
UbuntuにパッケージでインストールしたApacheやNginxは、www-dataというユーザーの権限で動いています
アップロードされたファイルの保存先など、Webサーバーが書き込む必要があるディレクトリは、所有者をwww-dataにすることがあります
ただし、書き込みが必要ない場所までwww-dataのものにすると、Webアプリが乗っ取られたときに書き換えられる範囲が広がるので、必要な範囲だけにしましょう
さらにグループを開発チームのグループにしておくと、所有者はwww-dataのまま、チームのメンバーも編集できるようにできます
# site一式の所有者とグループをwww-dataにする
sudo△chown△-R△www-data:www-data△site
ls△-l△site
実行結果:
total 12
drwxrwxr-x 2 www-data www-data 4096 Nov 1 10:00 css
drwxrwxr-x 2 www-data www-data 4096 Nov 1 10:00 images
-rw-rw-r– 1 www-data www-data 17 Nov 1 10:00 index.html
# 所有者がwww-dataになっていないファイルがないか確認する
find△site△!△-user△www-data
# 何も表示されなければ、すべてwww-dataになっています
# 所有者はwww-dataのまま、グループだけを開発チームのwebteamにする
sudo△chown△-R△:webteam△site
ls△-ld△site△site/css△site/images
実行結果:
drwxrwxr-x 4 www-data webteam 4096 Nov 1 10:00 site
drwxrwxr-x 2 www-data webteam 4096 Nov 1 10:00 site/css
drwxrwxr-x 2 www-data webteam 4096 Nov 1 10:00 site/images
# 実際にチームで編集するには、chmod△-R△g+w△siteなどでグループの書き込み権限も必要です
# 練習が終わったら、site一式をuser:userに戻す
sudo△chown△-R△user:user△site
sudoで作ってしまったファイルを自分のものに戻す
sudoを付けてファイルを作ると、そのファイルの所有者はrootになります
このとき自分は「その他のユーザー」の権限で扱われるので、その他のユーザーに書き込み権限がなければ編集できません
こういうときは、sudo△chownで自分のユーザーに戻しましょう
# 事前準備:sudoを付けてファイルを作る
sudo△touch△-d△”2026-11-01△10:00″△root.log
ls△-l△root.log
実行結果:
-rw-r–r– 1 root root 0 Nov 1 10:00 root.log
# 一般ユーザーで追記しようとする
echo△”test”△|△tee△-a△root.log
実行結果:
tee: root.log: Permission denied
test
# 所有者がrootで、その他のユーザーの権限はr–(読み取りだけ)なので、Permission deniedになります
# 所有者とグループを自分(user)に戻す
sudo△chown△user:△root.log
echo△”test”△|△tee△-a△root.log
実行結果:
test
cat△root.log
実行結果:
test
# 今度は追記できました
# 練習用のファイルを削除する
rm△root.log
トラブルシューティング
chownコマンドを使うときによくあるエラーと、その原因です
「invalid user」「invalid group」エラーが出る
指定したユーザーやグループが存在しないと、このエラーになります
ユーザー名やグループ名のつづりを間違えていないか、getent△passwd△ユーザー名やgetent△group△グループ名で確認しましょう
# 存在しないユーザーを指定した場合
sudo△chown△nosuchuser△memo.txt
実行結果:
chown: invalid user: ‘nosuchuser’
# 存在しないグループを指定した場合
sudo△chown△user:nosuchgroup△memo.txt
実行結果:
chown: invalid group: ‘user:nosuchgroup’
# ユーザーが存在するかを確認する(存在しなければ何も表示されません)
getent△passwd△nosuchuser
getent△passwd△www-data△|△cut△-d:△-f1
実行結果:
www-data
「Operation not permitted」エラーが出る
sudoを付けずに所有者を変えようとしたときや、所属していないグループに変えようとしたときに出るエラーです
-vを付けると、エラーの後に「failed to change ownership」と、何に変えようとして失敗したのかも表示されます
所有者を変更する必要がある場合は、sudoを付けて実行しましょう
chown△-v△root△memo.txt
実行結果:
chown: changing ownership of ‘memo.txt’: Operation not permitted
failed to change ownership of ‘memo.txt’ from user to root
「No such file or directory」エラーが出る
指定したファイルが存在しないときに出るエラーです
ファイル名のつづりや、今いるディレクトリ(pwd)を確認しましょう
sudo△chown△root△nofile.txt
実行結果:
chown: cannot access ‘nofile.txt’: No such file or directory
後片付け
最後に、テスト用ディレクトリのファイルがすべてuser:userに戻っていることを確認してから、この記事で作ったグループwebteamを削除します
グループを削除すると、そのグループのまま残ったファイルは、ls△-lのグループ欄が数字(GID)の表示になるので、先に確認しておきましょう
# chown-testの外に移動する
cd△..
# userのものになっていないファイルがないか確認する
find△chown-test△!△-user△user△-o△!△-group△user
# 何も表示されなければ、すべてuser:userに戻っています
# 練習用のグループwebteamを削除する
sudo△groupdel△webteam
getent△group△webteam
# 何も表示されなければ、削除できています
# テスト用ディレクトリも不要なら、rm△-r△chown-testで削除してください
まとめ
いかがでしたでしょうか
今回はchownコマンドについてまとめてみました
chownは「所有者」「所有者:グループ」「:グループ」「所有者:」の書き方で、ファイルの所有者とグループを変更できるコマンドです
所有者の変更にはroot権限(sudo)が必要で、一般ユーザーは自分のファイルのグループを、所属しているグループに変えることだけができます
-Rで中身ごと、-hでシンボリックリンク自体、–fromや–referenceで条件や見本を指定して変更できますが、-Rはパスを確認してから使いましょう
ぜひマスターしてください!
