chown/chgrp 入門 - ファイル所有者を変更する

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 :groupchgrp 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

次に読む