InfraAcademy

InfraAcademy Blog

Linuxのchownコマンドでファイルの所有者や所有グループを変更する方法を解説

| #Linux #コマンド

こんにちは、フルスタックエンジニアのryuです。

Linuxでファイルを編集しようとしたら、Permission deniedと表示された。 所有者がrootになっていて、一般ユーザーでは変更できない。

そんなときに使うのが、chownコマンドです。

chownでは、ファイルやディレクトリの所有ユーザーと所有グループを変更できます。

この記事では、基本的な書式、再帰的な変更、シンボリックリンクの注意点まで初心者向けに解説します。

chownコマンドとは?

chownは、ファイルやディレクトリの所有ユーザーと所有グループを変更するコマンドです。

名前はchange ownerに由来します。

所有者と所有グループの違い

Linuxのファイルには、所有ユーザーと所有グループが設定されています。

ls -l sample.txt

実行結果の例です。

-rw-r----- 1 user1 developers 1200 Jul 15 10:00 sample.txt

この場合、所有ユーザーはuser1、所有グループはdevelopersです。

所有者やグループごとに、読み込み・書き込み・実行の権限を設定できます。

chownが必要になる場面

chownは、次のような場面で使います。

  • rootで作成したファイルを一般ユーザーへ渡す
  • Webサーバーが読み書きするディレクトリを調整する
  • 複数ユーザーで共有するファイルのグループを変更する
  • バックアップから戻したファイルの所有者を修正する

所有者を変えれば必ず動くわけではありません。

chmodで設定する権限や、親ディレクトリの権限も合わせて確認します。

【関連記事】Linuxのファイル権限とchmodの使い方

chownの基本的な使い方

chownの基本書式は以下です。

chown [オプション] 所有者[:グループ] ファイル

所有者の変更には、通常root権限が必要です。

所有者だけを変更する

ファイルの所有者をuser1へ変更します。

sudo chown user1 sample.txt

変更後は、ls -lで確認します。

ls -l sample.txt

グループを指定していないため、所有グループは変更されません。

所有者とグループを同時に変更する

所有者をuser1、所有グループをdevelopersへ変更します。

sudo chown user1:developers sample.txt

所有者とグループの間は、コロンで区切ります。

古い手順ではドットを使った書き方を見かける場合がありますが、新しく書く場合はコロンを使いましょう。

グループだけを変更する

所有者を変えず、所有グループだけを変更する場合は、コロンの後ろへグループ名を指定します。

sudo chown :developers sample.txt

chgrpを使っても同じ目的を達成できます。

sudo chgrp developers sample.txt

グループだけを変更することが明確な場合は、chgrpの方が意図を読み取りやすいこともあります。

実際にchownで所有者を変更する

ここでは、ファイルを作成し、所有者が変わる流れを確認します。

変更前の所有者を確認する

ファイルを作成します。

touch a.txt
ls -l a.txt

実行したユーザーによって、表示される所有者とグループは異なります。

現在のユーザーは、idwhoamiで確認できます。

whoami
id

chownを実行して確認する

所有者をuserへ変更します。

sudo chown user a.txt
ls -l a.txt

所有者の部分がuserへ変わっていれば完了です。

変更後に、対象ユーザーで読み書きできるかも確認しましょう。

ディレクトリの所有者を変更する

ディレクトリも、ファイルと同じ書式で変更できます。

sudo chown user1:developers project/

ただし、このコマンドだけでは、ディレクトリの中にあるファイルまでは変更されません。

-Rで中身をまとめて変更する

ディレクトリ以下を再帰的に変更する場合は、-Rを付けます。

sudo chown -R user1:developers project/

project/の中にあるファイルやサブディレクトリも対象になります。

実行前に、対象範囲を確認しましょう。

find project -maxdepth 2 -ls

-Rのパス指定に注意する

sudo chown -Rは、広い範囲の所有者を一度に変更できます。

パスを間違えると、OSやアプリケーションが必要とする所有者まで変えてしまいます。

私は実行前に、現在地と対象を確認します。

pwd
ls -ld project/

変数を含むスクリプトでは、変数が空になっていないかも確認してください。

chownの便利なオプション

chownには、変更内容の確認や安全性を高めるオプションがあります。

-vと-cで変更内容を表示する

すべての対象について処理内容を表示する場合は、-vを使います。

sudo chown -v user1 sample.txt

実際に所有者が変わったファイルだけを表示する場合は、-cです。

sudo chown -c -R user1:developers project/

大量のファイルを変更するときは、-cの方が結果を確認しやすい場合があります。

--referenceで別ファイルと同じ所有者にする

既存ファイルと同じ所有者・グループへそろえる場合は、--referenceを使えます。

sudo chown --reference=reference.txt target.txt

ユーザー名やグループ名を手入力しなくても、reference.txtと同じ状態になります。

設定ファイルを置き換えたあと、周囲のファイルと所有者をそろえたい場合に便利です。

--fromで変更前の所有者を限定する

現在の所有者が一致するファイルだけを変更する場合は、--fromを使います。

sudo chown -R \
  --from=olduser:oldgroup \
  newuser:newgroup \
  project/

想定外の所有者まで変更することを減らせます。

ただし、実行前後の確認が不要になるわけではありません。

シンボリックリンクとchown

シンボリックリンクが含まれる場合は、リンク自体とリンク先のどちらを変更するのか注意が必要です。

通常はリンク先が対象になる

再帰指定をしていない通常のchownでは、シンボリックリンクそのものではなく、リンク先の所有者を変更するのが基本です。

sudo chown user1 link-file

リンク先の重要なファイルを意図せず変更しないよう、事前に確認します。

ls -l link-file
readlink -f link-file

-hでリンク自体を変更する

シンボリックリンクそのものの所有者を変更する場合は、-hを使います。

sudo chown -h user1:developers link-file

OSやファイルシステムによっては、シンボリックリンク自体の所有者変更に制約があります。

-Rとシンボリックリンクを組み合わせる場合は、対象範囲が広がらないよう特に注意しましょう。

chownでPermission deniedになる原因

chown自体を実行したときに、Operation not permittedPermission deniedが表示される場合があります。

原因を分けて確認しましょう。

所有者を変更する権限がない

一般ユーザーは、自由にファイルの所有者を変更できません。

必要な権限がある場合は、sudoを使います。

sudo chown user1 sample.txt

sudoを使えない環境では、管理者へ依頼してください。

指定したユーザーやグループが存在しない

ユーザーが存在するか確認します。

id user1

グループはgetentで確認できます。

getent group developers

入力ミスや、別サーバーにしか存在しないアカウントを指定していないか確認しましょう。

読み取り専用のファイルシステムになっている

ファイルシステムが読み取り専用でマウントされていると、所有者を変更できません。

findmnt -T sample.txt

マウントオプションにroがないか確認します。

障害によって読み取り専用になった可能性もあるため、原因を調べずに再マウントしないようにしましょう。

chmodとchownの違い

chmodとchownは、どちらもファイル管理で使いますが、変更する対象が異なります。

コマンド 変更するもの
chmod 読み込み・書き込み・実行の権限
chown 所有ユーザーと所有グループ
chgrp 所有グループ

例えば、所有者を変更しても、所有者に書き込み権限がなければ編集できません。

sudo chown user1 sample.txt
chmod u+w sample.txt

権限エラーでは、所有者だけでなくls -lの権限表示も確認してください。

chownコマンドの使い方まとめ

所有者だけを変更する場合は、次のように実行します。

sudo chown user1 sample.txt

所有者とグループを同時に変更する場合は、コロンで区切ります。

sudo chown user1:developers sample.txt

ディレクトリ以下を変更する場合は、-Rを使います。

sudo chown -R user1:developers project/

エンジニアとして10年以上Linuxを扱っていますが、私はchown -Rを実行する前に、必ず対象パスと現在の所有者を確認します。

所有者を変更すること自体は簡単ですが、範囲を間違えるとサービスが起動しなくなることもあります。

エラーを消すために所有者を変えるのではなく、どのユーザーがそのファイルを管理するべきか考えることが大切です。

chownを実際に練習したい方へ

InfraAcademyでは、ブラウザ上のLinux環境でファイルを作成し、chownやchmodを実行しながら学習できます。

基本操作から学びたい方は、Linux入門講座を確認してみてください。

ユーザー、グループ、権限管理まで学びたい方は、Linux中級講座がおすすめです。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る