Webサーバーのドキュメントルートを別ユーザーへ引き渡すとき、アカウント移行後にホームディレクトリの所有者を整理したいとき——ファイルの所有者をディレクトリごとまとめて変更したい場面は実務でよく出てきます。chown コマンドの -R(再帰)オプションを使えば、指定ディレクトリ以下のファイルとサブディレクトリを一括で書き換えられます。
一括変更の基本コマンド(まず結論)
所有者とグループをまとめて変更するには次のコマンドを使います。
# 所有者とグループを同時に変更する(最もよく使う形)
sudo chown -R 新ユーザー名:新グループ名 /対象ディレクトリ/
# 例:/var/www/html 配下を www-data に変更する
sudo chown -R www-data:www-data /var/www/html/
-R を付けない場合はディレクトリ自体の所有者のみが変わり、中のファイルやサブディレクトリは変更されません。配下をまとめて変えたいときは必ず -R を付けてください。
なお、古い資料ではドット区切り(例:root.root)が使われている場合がありますが、現代のLinuxではコロン区切り(root:root)が正式な書き方です。ドット区切りも動作しますが、ユーザー名にドットが含まれる場合にあいまいな解釈を招くため、コロン区切りに統一することを推奨します。
変更前後の状態を必ず確認する
変更前に現在の所有者を把握しておくと、誤操作のリカバリーがしやすくなります。
# 変更前の確認(-la で所有者・グループを表示)
ls -la /対象ディレクトリ/
# 変更実行
sudo chown -R 新ユーザー名:新グループ名 /対象ディレクトリ/
# 変更後の確認
ls -la /対象ディレクトリ/
ディレクトリが深く、サブディレクトリも含めて全体を確認したい場合は find と組み合わせて所有者を一覧表示できます。
# 変更後にサブディレクトリ含めて所有者・グループを確認する
find /対象ディレクトリ/ -exec ls -ld {} \; | awk '{print $3, $4, $NF}'
所有者だけ・グループだけを変更したい場合
所有者とグループは独立して変更できます。構文は次のとおりです。
# 所有者だけ変更する(グループはそのまま)
sudo chown -R 新ユーザー名 /対象ディレクトリ/
# グループだけ変更する(所有者はそのまま)
sudo chown -R :新グループ名 /対象ディレクトリ/
# グループだけ変更する場合は chgrp でも同じことができる
sudo chgrp -R 新グループ名 /対象ディレクトリ/
コロンの後ろにグループ名だけを書くとグループのみが変更されます。Webアプリの運用でよくある「デプロイユーザーとWebサーバー実行ユーザーでグループだけ共有したい」という場面では、グループのみ変更するパターンが有効です。
実務でよく出てくる場面
Webサーバーのドキュメントルート整備
# Ubuntu / Debian 系(Apache・Nginxの実行ユーザーは www-data)
sudo chown -R www-data:www-data /var/www/html/
# Rocky Linux / AlmaLinux 系(Apacheの実行ユーザーは apache)
sudo chown -R apache:apache /var/www/html/
ユーザーアカウント移行時のホームディレクトリ整理
# 旧ユーザー(olduser)のファイルを新ユーザー(newuser)に移譲する
sudo mv /home/olduser /home/newuser
sudo chown -R newuser:newuser /home/newuser/
デプロイスクリプトへの組み込み
ある運用現場では、デプロイスクリプトの最終ステップとして chown -R を組み込み、デプロイのたびにファイルの所有者がrootになってしまう問題を自動解消する運用を取っています。CI/CDパイプラインで sudo 付きで実行できるよう /etc/sudoers に適切なエントリを追加しておくのが一般的なパターンです。
危険な操作と落とし穴
絶対にやってはいけない操作
# NG:/ から再帰変更するとシステム全体が壊れる
sudo chown -R someuser / # 絶対禁止
# NG:システムディレクトリへの適用も同様に危険
sudo chown -R someuser /etc/
sudo chown -R someuser /usr/
現代のLinux(systemd環境)では多くのサービスが特定ユーザーで動作しています。システムディレクトリの所有者を変えるとサービスが軒並み起動しなくなります。誤って実行してしまった場合はOSのインストールメディアからレスキューモードで起動し、元の所有者に戻す作業が必要になります。対象パスは常に絶対パスで指定し、実行前にパスを目視確認する習慣をつけてください。
シンボリックリンクの扱いに注意-R はデフォルトでシンボリックリンクが指す先のディレクトリには入りません(リンク自体の所有者は変更されます)。リンク先の実体も変えたい場合は、リンク先ディレクトリを直接対象に指定するか、-h オプションの挙動を確認した上で判断してください。
ファイルのみ・ディレクトリのみに絞って変更する
ファイルとディレクトリで別々のパーミッション・所有者を設定したい場面では、find と組み合わせて対象を絞ります。
# ファイルのみ所有者を変更する
sudo find /対象ディレクトリ/ -type f -exec chown 新ユーザー名:新グループ名 {} +
# ディレクトリのみ所有者を変更する
sudo find /対象ディレクトリ/ -type d -exec chown 新ユーザー名:新グループ名 {} +
# 特定の拡張子(例:.php)だけ変更する
sudo find /対象ディレクトリ/ -type f -name "*.php" -exec chown 新ユーザー名:新グループ名 {} +
末尾を \; ではなく + にすることで、chown を一度の呼び出しで複数ファイルに適用できます。ファイル数が多い環境では処理速度に大きな差が出るため、+ を使う形を標準にしておくことをおすすめします。
ディレクトリ配下の所有者変更は chown -R で完結するシンプルな操作ですが、対象パスの指定ミスがシステム破壊に直結する点だけは常に念頭に置いてください。実行前のパス確認と、変更後の ls -la による目視確認を作業手順に組み込むことで、運用上のリスクを大幅に下げられます。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
