chownコマンドの使い方完全ガイド|所有者・グループ変更の基本から実践まで

コマンドリファレンス

chown は、ファイルやディレクトリの所有者(user)や所有グループ(group)を変更するコマンドです。

Webサーバーのファイル権限設定・アプリケーション用ユーザーへの割り当て・デプロイ後の一括変更など、Linux運用で頻繁に使う場面があります。

本記事では、

  • 基本構文とオプション一覧
  • よく使うパターンのコピペサンプル
  • よくあるエラーと対処法
  • chmod・chgrp との使い分け

などをコード例とともにわかりやすく解説します。ファイルパーミッションについては「chmod」も合わせて参照してください。

chownコマンドとは

Linux・macOS のファイルシステムでは、すべてのファイル・ディレクトリに所有者ユーザー所有グループが設定されています。chown はこれらを変更するコマンドです。

現在の所有者・グループは ls -l で確認できます。

ls -l file.txt
# -rw-r--r-- 1 alice staff 1234 Apr 28 10:00 file.txt
#              ↑所有者  ↑グループ

構文(Syntax)

chown [オプション] [OWNER][:GROUP] FILE...
  • OWNER のみ指定 → 所有者だけ変更
  • OWNER:GROUP で指定 → 所有者とグループを同時変更
  • :GROUP のみ指定 → グループだけ変更

主なオプション一覧

オプション説明使用例
(なし)所有者を変更chown alice file.txt
:グループも指定可能chown alice:staff file.txt
-Rディレクトリ以下を再帰的に変更chown -R www-data:www-data /var/www/html
-c変更があった場合のみ報告chown -c alice file.txt
-v詳細な情報を表示(変更の有無にかかわらず)chown -v bob:developers file.txt
--reference=FILE指定ファイルと同じ所有者・グループに変更chown --reference=ref.txt target.txt
-hシンボリックリンク自体の所有者を変更chown -h alice symlink

すぐ使えるコピペサンプル集

所有者を変更する

sudo chown alice file.txt

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

sudo chown alice:staff file.txt

グループだけ変更する

sudo chown :developers project/

グループのみ変更したい場合は chgrp コマンドを使う方法もあります。

ディレクトリ配下を再帰的に変更する(-R)

sudo chown -R www-data:www-data /var/www/html

Webサーバー(Apache・Nginx)のドキュメントルートなど、ディレクトリ全体の所有者を一括変更するときに使います。

参照ファイルと同じ所有者・グループを適用する

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

既存ファイルの権限設定を別ファイルにコピーしたいときに便利です。

変更内容を確認しながら実行する(-v)

sudo chown -Rv alice:staff /home/alice/

実行結果の例:

changed ownership of '/home/alice/file1.txt' from root:root to alice:staff
changed ownership of '/home/alice/docs' from root:root to alice:staff

デプロイ後にアプリ用ユーザーに一括変更する

sudo chown -R appuser:appgroup /opt/myapp

デプロイスクリプトでよく使われるパターンです。

よくあるエラーと対処法

Operation not permitted(権限エラー)

chown alice file.txt
# chown: changing ownership of 'file.txt': Operation not permitted

原因: 所有者変更には root 権限が必要です。
対処: sudo を付けて実行します。

sudo chown alice file.txt

invalid user(ユーザーが存在しない)

sudo chown nobody123 file.txt
# chown: invalid user: 'nobody123'

原因: 指定したユーザーがシステムに存在しません。
対処: id ユーザー名cat /etc/passwd でユーザーの存在を確認します。

id alice        # ユーザーの存在確認
getent passwd   # ユーザー一覧を表示

-R で意図しないファイルまで変更してしまった

原因: -R はディレクトリ以下すべてを再帰的に変更します。パスのミスに注意が必要です。
対処: 事前に -v を付けてドライラン的に確認するか、変更前に ls -lR で対象を把握しておきましょう。

# 変更前に対象ファイルを確認
ls -lR /対象ディレクトリ/

# 変更内容を出力しながら実行
sudo chown -Rv alice:staff /対象ディレクトリ/

シンボリックリンクの所有者が変わらない

原因: デフォルトでは chown はシンボリックリンクのリンク先を変更します。リンク自体を変更したい場合は -h オプションを使います。

sudo chown -h alice symlink_file

chown・chmod・chgrp の使い分け

コマンド変更できるもの主な用途
chown所有者・所有グループファイルの帰属ユーザーを変更する
chmod読み取り・書き込み・実行権限ファイルの操作権限を変更する
chgrp所有グループのみグループだけ変更したいときにシンプルに使える
umask新規作成時のデフォルト権限ファイル作成時の初期権限マスクを設定する

実践ユースケース

NginxでWebサーバーのドキュメントルートを設定する

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

Nginx・Apache では www-data ユーザーがファイルを読む必要があります。デプロイ後にこのセットで実行するのが定番です。

スクリプトファイルをアプリユーザーに移譲する

sudo chown appuser:appgroup /usr/local/bin/myscript.sh
sudo chmod 750 /usr/local/bin/myscript.sh

ホームディレクトリを正しい所有者に戻す

sudo chown -R bob:bob /home/bob

root 操作でホームディレクトリの所有者が変わってしまった場合の修復に使います。

備考

  • 所有者変更は通常 root 権限が必要です(sudo が必要)。
  • グループだけ変更する場合は chgrp の方がシンプルに使えます。
  • -R を付けて実行する場合は、意図せぬ所有権変更によるシステム障害に注意が必要です。
  • macOS では BSD 版の chown が使われており、一部オプションの挙動が Linux(GNU版)と異なります。

関連コマンド

  • chmod : ファイルやディレクトリのアクセス権を変更
  • chgrp : グループ所有権のみ変更
  • umask : 新規ファイル作成時のデフォルト権限を制御
  • ls -l : 所有者と権限を確認

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント