Linux入門:コマンド操作のきほん
所有者の変更 chown
所有者の変更 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 の実行イメージ
実例
ターミナル
# 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 が必要になる典型シーン
デプロイで
scpやrsyncでファイルを送ると、所有者は送信元の uid ベースに残ることがあります。Web サーバーや DB が読み書きできないトラブルの 7 割はこの所有者ミスマッチが原因です。
- 新規アプリのデプロイ後、
www-dataやnginxユーザーに所有権を委譲する - 退職者のホームディレクトリを別ユーザーに引き継ぐ
- バックアップから戻したファイルの所有者を復元する
- 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.htmlchown と数値 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 操作の確認手順
chown -Rを/etcや/のようなシステムディレクトリで誤実行すると、システム全体が起動しなくなることがあります。必ず対象パスをechoかlsで確認してから本実行に進んでください。
まとめ
chown ユーザー:グループ ファイルで所有者を変更する- 通常は
root権限が必要で、sudoと組み合わせる -Rで再帰、ディレクトリ配下を一括変更できる- デプロイ後の所有者ミスマッチが本番トラブルの定番原因
- 数値 UID / GID 指定や
--referenceも便利 - 本演習環境では実行不可、本番サーバーで使う
次のレッスン
次は sudo - スーパーユーザーの力 で、ファイルの所有者を変更するchownコマンドをターミナルで使ってみましょう を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- chown コマンド の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. chown コマンド とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン