Linux入門:コマンド操作のきほん

所有者の変更 chown

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

所有者の変更 chown とは

ファイルの所有者を変更するchownコマンドをターミナルで使ってみましょう。本レッスンでは、所有者の変更 chown の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

なぜ重要か

chown は「change owner」の略で、ファイルやディレクトリの 所有者ユーザー所有グループ を変更するコマンドです。デプロイ直後にファイルが root 所有のままで Web サーバー (www-data) から書き込めない、ユーザー削除に伴う遺産ファイルを別ユーザーに引き継ぐ、共有ディレクトリを developers グループに譲渡する。本番サーバーでは chmod と並んでよく使われる重要コマンドです。所有者変更は通常 root 権限が必要なため、本演習環境では実行できませんが、本番でつまずかないよう構文と典型ケースを押さえます。

構文

ターミナル

chown [オプション] ユーザー[:グループ] ファイル

主要パターン

書き方意味
chown alice file.txt所有者を alice に変更(グループはそのまま)
chown :developers file.txtグループだけを developers に変更
chown alice:developers file.txt所有者とグループを同時に変更
chown -R alice:www file.txtディレクトリ配下を再帰的に変更

コロンの代わりにドット alice.developers を使う方言もありますが、現代のディストリビューションではコロンが標準です。

chown の実行イメージ

diagram (will load when visible)

実例

ターミナル

# Web アプリのアップロードフォルダを www-data 所有に変更 $ sudo chown -R www-data:www-data /var/www/uploads # 確認 $ ls -ld /var/www/uploads drwxr-xr-x 2 www-data www-data 4096 May 20 12:00 /var/www/uploads

デプロイ直後はファイルが root:root 所有になっていて、Web サーバーから書き込めない事象がよく発生します。これを chown -R www-data:www-data で一括変換するのが定番の対処です。

デモ(演習環境では実行不可)

ターミナル

# /tmp/demo.txt を作り、chown を試そうとすると Operation not permitted touch /tmp/demo.txt ls -l /tmp/demo.txt # chown root /tmp/demo.txt # 一般ユーザーは root に変更できない

本演習の Cloud Functions 環境ではユーザーが固定されており、chown は基本的に Operation not permitted で失敗します。実際のサーバー (sudo 権限あり) では sudo chown ... の形で実行します。

chown が必要になる典型シーン

デプロイで scprsync でファイルを送ると、所有者は送信元の uid ベースに残ることがあります。Web サーバーや DB が読み書きできないトラブルの 7 割はこの所有者ミスマッチが原因です。

  • 新規アプリのデプロイ後、www-datanginx ユーザーに所有権を委譲する
  • 退職者のホームディレクトリを別ユーザーに引き継ぐ
  • バックアップから戻したファイルの所有者を復元する
  • Docker コンテナで volume mount した場合の uid ずれを修正する

chgrp との違い

ターミナル

chgrp developers /srv/app # グループだけ変更(chown :developers と同じ)

chgrp はグループだけ変えるコマンドですが、chown :developers でも同じことができるため chown に統一する人が多いです。

所有者の変更は root にしかできない強力な操作です。本番では「なぜ chown するか」のコメントを残し、変更前後の状態を ls -l でログに取る運用が推奨されます。

参照ファイルから所有権をコピーする

--reference オプションを使うと、別ファイルの所有者・グループ設定をそのままコピーできます。デプロイ時に「このファイルと同じ所有権にしてほしい」というケースで重宝します。

ターミナル

# /var/www/index.html と同じ所有権を新しいファイルに適用 sudo chown --reference=/var/www/index.html /var/www/new-page.html

chown と数値 UID / GID

ユーザー名ではなく UID / GID の数値で直接指定することもできます。Docker のような環境では数値の方が確実に動作します。

ターミナル

# UID 33 (www-data) と GID 33 を直接指定 sudo chown 33:33 /var/www/index.html # id コマンドで数値を確認 id www-data # uid=33(www-data) gid=33(www-data) groups=33(www-data)

chown 操作の確認手順

diagram (will load when visible)

chown -R/etc/ のようなシステムディレクトリで誤実行すると、システム全体が起動しなくなることがあります。必ず対象パスを echols で確認してから本実行に進んでください。

まとめ

  • chown ユーザー:グループ ファイル で所有者を変更する
  • 通常は root 権限が必要で、sudo と組み合わせる
  • -R で再帰、ディレクトリ配下を一括変更できる
  • デプロイ後の所有者ミスマッチが本番トラブルの定番原因
  • 数値 UID / GID 指定や --reference も便利
  • 本演習環境では実行不可、本番サーバーで使う

次のレッスン

次は sudo - スーパーユーザーの力 で、ファイルの所有者を変更するchownコマンドをターミナルで使ってみましょう を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. chown コマンド の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. chown コマンド とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

参考リンク