Linux / コマンド / chown - ファイルの所有者とグループを変更

chownは、ファイルやディレクトリの所有ユーザーと所有グループを変更します。サービスデータディレクトリの所有権を合わせるときに便利ですが、誤った再帰的適用はサービスへのアクセスを阻害する可能性があります。

所有者:グループを指定すると両方の属性を一緒に変更し、所有者のみを指定すると通常はグループはそのまま残ります。変更権限はシステムポリシーにより制限され、通常は管理者権限が必要です。通常の読み取り・書き込み・実行ビットは chmodによるアクセス権変更 で管理します。ただし、所有者やグループを変えるとset-user-ID・set-group-IDなどの特殊ビットが解除される場合があるため、変更後のモードも確認します。

基本的な文法

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

インストールされている実装とオプションは、配布版によって異なる場合があります。man chownで現在のシステムの説明を確認してください。

使用例

所有者のみ変更

以下は実在する alice と既存の実習用 report.txt を使い、必要な管理権限がある場合の例です。パスが意図した通常ファイルであることと現在の所有者・グループを先に確認します。

sudo chown alice report.txt

所有者とグループを一緒に変更

editors グループが実在することを確認し、所有者とグループを明示します。alice だけならグループは変わりませんが、alice: のように末尾にコロンを付けるとGNU版ではログイングループも設定されるため、区別してください。

sudo chown alice:editors report.txt

変更結果の確認

statの所有者・グループ表示 を変更前後に比較します。このコマンド自体は所有権を変更しません。

stat -c '%U:%G %n' report.txt

所有者・グループ変更結果の確認

以下は既存の実習用 demo.txt と、実在する alice ユーザー、developers グループを前提とする独立した例です。所有者の変更には通常管理者権限が必要です。

sudo chown alice:developers demo.txt
stat -c '%U:%G %n' demo.txt

例の出力:

alice:developers demo.txt

chown が成功した場合、通常出力はありませんので、stat や ls -l で結果を確認します。-R はディレクトリ以下全体に適用されるため、ウェブルートやシステムディレクトリで使用する前にパスとシンボリックリンクの処理方法を確認してください。所有権の変更はサービスアクセス方針を変更する可能性があります。

コンテナやネットワークファイルシステムでは名前が同じでも内部の数値のユーザーID(UID)・グループID(GID) が異なるため、予想と異なる所有権として見えることがあります。自動化では id ユーザー と対象の stat -c '%u:%g' を合わせて確認してください。サービスアカウントの所有権は任意に変更すると書き込み・実行権限のエラーが発生する可能性があります。

主なオプションと形式

オプション・形式 説明
-R 下位項目まで所有権を再帰的に変更します。
-h シンボリックリンクの対象ではなく、リンク自体を対象とします。
--reference=ファイル 参照ファイルの所有者・グループをコピーします。
-v 処理したファイルを詳しく表示します。

使用する際の注意点

パスを1つ間違えて指定したchown -Rは、多くのファイルの所有権を一度に変更できます。まずstatやfindで範囲を確認し、可能であれば狭いパスにだけ適用してください。リンク自体と参照先のどちらを変更するかという指定(-h など)と、再帰探索でリンクをたどるかという指定(-H・-L・-P)は別です。組み合わせと実装を確認し、共有領域で他者が対象を置き換える可能性にも注意します。元に戻す場合に備えて、変更前の数値UID・GIDも記録しておきます。

よくある質問

chown alice report.txtとchown alice:editors report.txtの違いは?

前者は所有ユーザーのみを変更し、後者は所有ユーザーとグループを一緒に指定します。

公式ドキュメント

オプションの正確な動作や実装ごとの差異は、chown関連の公式ドキュメントで確認できます。