chown/chgrp 入門 - ファイル所有者を変更する
chown / chgrp でできること
chown はファイルの所有ユーザーを変更するコマンド、chgrp は所有グループを変更するコマンドだ。chown user:group の形式で両方を一度に変更できる。
結論(実務の型)
- 所有ユーザーを変える →
sudo chown user file - グループも一緒に変える →
sudo chown user:group file - グループだけ変える →
sudo chgrp group file - ディレクトリ配下を一括変更 →
sudo chown -R user:group dir/ - 変更前後に
ls -laで確認する
ls -l で現在の所有者を確認する
変更前に現在の所有者を把握する。ls -l 出力の3・4列目が所有ユーザーと所有グループだ。
$ ls -l /var/www/html/index.html
-rw-r--r-- 1 root root 1024 Jun 1 10:00 /var/www/html/index.html
| 位置 | 値 | 意味 |
|---|---|---|
| 3列目 | root |
所有ユーザー |
| 4列目 | root |
所有グループ |
chown の基本構文
所有ユーザーを変更するには chown を使う。自分以外のファイルを変更するには sudo が必要だ。
所有ユーザーだけ変更する
$ sudo chown www-data /var/www/html/index.html $ ls -l /var/www/html/index.html
-rw-r--r-- 1 www-data root 1024 Jun 1 10:00 /var/www/html/index.html
所有ユーザーとグループを同時に変更する
user:group の形式で一度に両方変更できる。
$ sudo chown www-data:www-data /var/www/html/index.html $ ls -l /var/www/html/index.html
-rw-r--r-- 1 www-data www-data 1024 Jun 1 10:00 /var/www/html/index.html
グループのみ変更する(chown の :group 記法)
:group と書けば所有ユーザーはそのままでグループだけ変更できる。
$ sudo chown :developers /var/www/html/
コロン : の代わりにドット . を使う旧記法(chown user.group)も動作するが、現在はコロンが標準。
chgrp の基本構文
グループのみ変更する専用コマンドが chgrp だ。chown :group と同じ結果になる。
$ sudo chgrp www-data /var/www/html/index.html $ ls -l /var/www/html/index.html
-rw-r--r-- 1 root www-data 1024 Jun 1 10:00 /var/www/html/index.html
chown :group と chgrp group は機能的に等価。グループ変更の意図を明示したい場合は chgrp を使うと可読性が上がる。
-R でディレクトリを再帰的に変更する
ディレクトリ配下のすべてのファイル・サブディレクトリをまとめて変更するには -R を付ける。
$ sudo chown -R www-data:www-data /var/www/html/ $ ls -la /var/www/html/
drwxr-xr-x 2 www-data www-data 4096 Jun 1 10:00 . drwxr-xr-x 3 root root 4096 Jun 1 09:00 .. -rw-r--r-- 1 www-data www-data 1024 Jun 1 10:00 index.html -rw-r--r-- 1 www-data www-data 512 Jun 1 10:00 style.css
-R は指定ディレクトリ配下のすべてに適用される。影響範囲が大きいため、実行前に ls -la でターゲットを確認すること。
よくある使用パターン
Web サーバーへのアプリデプロイ時
# Nginx / Apache の実行ユーザー(www-data)に所有権を渡す $ sudo chown -R www-data:www-data /var/www/myapp/
アプリケーション専用ユーザーへの引き渡し
$ sudo chown -R deploy:deploy /opt/myapp/
sudo で作ったファイルを自分の所有に戻す
sudo で作成したファイルは root 所有になる。自分の所有に戻すには:
$ sudo chown $USER:$USER ~/myfile.txt
$USER は現在のログインユーザー名に自動展開される。
よくあるエラーと対処
Operation not permitted
chown: changing ownership of 'file.txt': Operation not permitted
原因: 所有者の変更は root のみ可能。sudo なしで実行すると発生する。
$ sudo chown user:group file.txt
invalid user / invalid group
chown: invalid user: 'webmaster' chgrp: invalid group: 'webteam'
原因: 存在しないユーザーまたはグループを指定している。
# ユーザー一覧 $ getent passwd | cut -d: -f1 # グループ一覧 $ getent group | cut -d: -f1
まとめ
| コマンド | 変更対象 |
|---|---|
chown user file |
所有ユーザーのみ |
chown :group file |
所有グループのみ |
chown user:group file |
所有ユーザー+グループ |
chgrp group file |
所有グループのみ |
-R オプション |
ディレクトリを再帰 |
確認の型
# 変更前確認 ls -la /path/to/target # 変更実行 sudo chown -R user:group /path/to/target # 変更後確認 ls -la /path/to/target