chownはファイルやディレクトリの所有者を変更するコマンドだ。
このページではchownを使ったファイルやディレクトリの所有者の変更方法を解説する。
ぜひ、この機会に覚えておいてほしい。
chownコマンドの基本
コマンドの基本動作
Linuxのグループやについて全体像を知りたい方は下記のページを先に確認してほしい。
chownコマンドは管理者ユーザー権限で行わないと、権限なしで操作できない場合がある。chownコマンドは管理者権限のアカウントで操作しよう。
使い方は、次のとおりだ。
$ chown 所有者名 ファイル名またはディレクトリ名
まず、ファイルconfig.datの所有者をlsコマンドの-lオプションで確認してみよう。
$ ls -l config.dat
config.datの所有者も所有グループもvagrantだ。
config.datの所有者をNoaへ変更する場合は、次のコマンドだ。
$ chown Noa config.dat
config.datの所有者がNoaへ変更された。
config.datの所有者を再度lsコマンドの-lオプションで確認してみよう。
$ ls -l config.dat
config.datの所有者がNoaへ変更されている。
chownコマンドのオプションたち
コマンドの一覧
後から詳細をご紹介するが、まずは一覧で見てみよう。
オプション-c( オプション--changes)
変更があったとき、メッセージを表示する
オプション-v(オプション--verbose)
コマンドの実行状況を表示する
オプション-f(オプション--silent,オプション--quiet,)
エラーメッセージを表示しない
オプション-h( オプション--no-dereference)
シンボリックリンク自体の所有者を変更する
オプション-R(オプション--recursive)
ディレクトリ内の所有者も変更する
では詳細を見ていこう。
-cオプション(--changesオプション):変更があったとき、メッセージを表示する
変更があったときのみ、結果を表示するコマンドで、書式は次のとおりだ。
$ chown -c 所有者名 ファイル名またはディレクトリ名
現在のファイルconfig.datの所有者をlsコマンドの-lオプションで確認してみよう。
$ ls -l config.dat
config.datの所有者はNoa、所有グループはvagrantだ。
config.datの所有者を-cオプションを使ってわざとNoaへ変更するような操作をしてみよう。
$ chown -c Noa config.dat
特にメッセージは表示されない。現在と同じ所有者名を指定したからだ。
今度は、Wood所有者へ変更してみよう。
config.datの所有者をFujiyaへ変更した時に変更のメッセージを表示するコマンドは次の通りだ。
$ chown -c Fujiya config.dat
今度は所有者がNoaからFujiyaに変更になったので、変更のメッセージが表示された。
-vオプション(--verboseオプション):コマンドの実行状況を表示する
-cオプションでは変更があったときのみ、結果を表示した。
-vコマンドは、どんな場合でも実行状況を表示するコマンドで、書式は次のとおりだ。
$ chown -v 所有者名 ファイル名またはディレクトリ名
現在のファイルconfig.datの所有者をlsコマンドの-lオプションで確認してみよう。
$ ls -l config.dat
config.datの所有者はFujiya、所有グループはvagrantだ。
config.datの所有者を-vオプションを使ってわざとFujiyaへ変更するような操作をしてみよう。
$ chown -v Fujiya config.dat
変更がなかったため、処理が保留されたメッセージが表示された。
今度は、所有者Shihoへ変更してみよう。
config.datの所有者をShihoへ変更した時に、結果にかかわらずメッセージを表示するコマンドは次の通りだ。
$ chown -v Shiho config.dat
今度は所有者がFujiyaからShihoに変更になったメッセージが表示された。
-fオプション(--silentオプション,--quietオプション):エラーメッセージを表示しない
ほとんどの場合、エラーメッセージを表示しないコマンドで、書式は次のとおりだ。
$ chown -f 所有者名 ファイル名またはディレクトリ名
わざと存在しないファイル名config12.datの所有者を-vオプションを使わないで所有者Limeへ変更するような操作をしてみよう。
$ chown Lime config12.dat
ファイルが存在しないメッセージが表示された。
今度は、-fオプションを使用してみよう。
存在しないファイル名config12.datの所有者を所有者Limeへ変更した時に、エラーメッセージを表示しないコマンドは次の通りだ。
$ chown -f Lime config12.dat
今度はメッセージが表示されない。
すべてのエラーメッセージが表示されなくなるのではなく、指定した所有者が存在しない時はエラーメッセ―ジを表示する。
$ chown -f Dany config.dat
ユーザーDanyは存在しないため、メッセージが表示された。
-hオプション(--no-dereferenceオプション):シンボリックリンク自体の所有者を変更する
chownコマンドを使ってシンボリックリンクを変更すると、シンボリックリンク先を変更することになり、シンボリックリンク自体を変更しない。
そこで-hオプションを指定することで、シンボリック自体を変更できる。
書式は次のとおりだ。
$ chown -h 所有者名 ファイル名またはディレクトリ名
現在のカレントディレクトリ配下のディレクトリ構造をlsコマンドの-l、-Rオプションで確認してみよう。
$ ls -lR
シンボリックリンクに注目してみよう。
カレントディレクトリのslinkはphp/hello.phpへのシンボリックリンクになっている。
slinkの所有者も、php/hello.phpの所有者もvagrantだ。
オプションなしで、slinkの所有者をLimeへ変更してみよう。
$ chown Lime slink
lsコマンドの-l、-Rオプションで再度確認してみよう。
$ ls -lR
slinkの所有者はvagrantのままで、シンボリックリンク先のphp/hello.phpの所有者がLimeへ変更されている。
オプションなしでは、シンボリックリンク自体の所有者は変更しない。
では、次に、-hオプションを使ってみよう。
$ chown -h Lime slink
lsコマンドの-l、-Rオプションで再度確認してみよう。
$ ls -lR
slinkの所有者がLimeへ変更されている。
-Rオプション(--recursiveオプション):ディレクトリ内の所有者も変更する
一度に複数のファイルやディレクトリを変更したい場合もあるだろう。
その場合、*などのワイルドカードを使って名前の一部を指定する場合がある。
オプションの指定がなければ、ディレクトリ内部の所有者は変更せず、カレントディレクトリのみが対象となる。
そこで-Rオプションを指定することで、カレントディレクトリ配下のファイルやディレクトリの所有者を変更できる。
書式は次のとおりだ。
$ chown -R 所有者名 ディレクトリ名
カレントディレクトリ配下のファイルやディレクトリの所有者をすべてFujiyaに変更するには次のコマンドだ。
$ chown -R Fujiya ./
lsコマンドの-l、-Rオプションで再度確認してみよう。
$ ls -lR
カレントディレクトリ配下のファイル、ディレクトリすべてがFujiya所有者へ変更されている。
シンボリックリンク先がシンボリックリンクだった場合
-hオプションではシンボリックリンク自体の所有者を変更できた。
オプションなしの場合では、シンボリック先を辿ったものの所有者を変更している。
オプションなしの場合でのシンボリックリンク先がさらにシンボリックリンクだった場合は、どうなるだろうか。
確認してみよう。
現在、カレントディレクトリ内のmain_targetはphp/targetへのシンボリックリンクだ。
さらにphp/targetはphp/include/target.incへのシンボリックリンクだ。
main_targetの所有者をNoaに変更する操作を行った場合、どこまでが変更範囲なのかを調べてみよう。
$ chown Noa main_target
lsコマンドの-l、-Rオプションでどう変更されたか確認してみよう。
$ ls -lR
main_targetから辿ることができる最終的なphp/include/target.incのみが所有者Noaに変更になった。
シンボリックリンク先がシンボリックリンクだった場合、オプションなしでは最終的なリンク先の所有者のみ変更する。
chown関連コマンド
最後にchownコマンドに関連して、基本的な所有者関連、及びアクセス権限関連のコマンドも紹介しておく
groupaddコマンド
所有者を追加する。
groupmodコマンド
所有者の設定を変更する。
groupdelコマンド
所有者を削除する。
useraddコマンド
ユーザーを追加する。
usermodコマンド
ユーザーの設定を変更する。
userdelコマンド
ユーザーを削除する。
chgrpコマンド
ディレクトリやファイルの所有者グループを変更する。
chmodコマンド
ディレクトリやファイルのアクセス権を変更する。
まとめ
今回は、chownコマンドを使ったファイルの所有者の設定の方法を解説した。
Linuxファイルサーバー管理者は必須の知識だ。
ぜひ覚えてスキルアップに役立てて欲しい。
この記事全体を通してファイル所有者の名前が画像と文章とで違う箇所が多数あると思います。
加えて、「ls -l」の出力結果の話で、「config.datの所有者はvagrant、所有者もvagrantだ。」と書いている部分はファイルオーナーとグループのことを言っているのであれば文言を変えた方がいいのではないかと思います。
ご指摘いただきありがとうございます。
所有者なのか所有グループなのかわかりづらい記述でしたので、
該当箇所を修正いたしました。
引き続き、ご愛読のほど、よろしくお願いいたします。