ファイルの所有者とグループの概念は、Linux の基本です。すべてのファイルは、所有者とグループに関連付けられています。 chown コマンドと chgrp コマンドを使用して、特定のファイルまたはディレクトリの所有者またはグループを変更できます。 ' コマンドも。
このコマンドを既に知っている場合でも、以下に挙げる例のいずれかはおそらく初めてかもしれません。
1.ファイルの所有者を変更する
# ls -lart tmpfile -rw-r--r-- 1 himanshu family 0 2012-05-22 20:03 tmpfile # chown root tmpfile # ls -l tmpfile -rw-r--r-- 1 root family 0 2012-05-22 20:03 tmpfile
ファイルの所有者が「himanshu」から「root」に変更されたことがわかります。
2.ファイルのグループを変更する
chown コマンドを使用して、(ファイルが属する) グループを変更することもできます。
# ls -l tmpfile -rw-r--r-- 1 himanshu family 0 2012-05-22 20:03 tmpfile # chown :friends tmpfile # ls -l tmpfile -rw-r--r-- 1 himanshu friends 0 2012-05-22 20:03 tmpfile
よく見ると、ファイルのグループが「家族」から「友達」に変わっていました。したがって、「:」の後に新しいグループ名を追加するだけで、ファイルのグループを変更できることがわかります。
3.所有者とグループの両方を変更
# ls -l tmpfile -rw-r--r-- 1 root family 0 2012-05-22 20:03 tmpfile # chown himanshu:friends tmpfile # ls -l tmpfile -rw-r--r-- 1 himanshu friends 0 2012-05-22 20:03 tmpfile
したがって、構文「
4.シンボリック リンク ファイルで chown コマンドを使用する
ここにシンボリック リンクがあります:
# ls -l tmpfile_symlnk lrwxrwxrwx 1 himanshu family 7 2012-05-22 20:03 tmpfile_symlnk -> tmpfile
したがって、シンボリック リンク「tmpfile_symlink」がファイル「tmpfile」にリンクしていることがわかります。
chown コマンドがシンボリック リンクで発行された場合に何が起こるか見てみましょう:
# chown root:friends tmpfile_symlnk # ls -l tmpfile_symlnk lrwxrwxrwx 1 himanshu family 7 2012-05-22 20:03 tmpfile_symlnk -> tmpfile # ls -l tmpfile -rw-r--r-- 1 root friends 0 2012-05-22 20:03 tmpfile
chown コマンドがシンボリック リンクで発行され、所有者とグループが変更された場合、そのシンボリック リンクの参照先、つまり、所有者とグループが変更された「tmpfile」になります。これは、chown コマンドのデフォルトの動作です。また、同じものに対してフラグ「-dereference」が存在します。
5. chown コマンドを使用して、シンボリック ファイルの所有者/グループを強制的に変更します。
以下に示すように、フラグ「-h」を使用すると、シンボリック リンクの所有者またはグループを強制的に変更できます。
# ls -l tmpfile_symlnk lrwxrwxrwx 1 himanshu family 7 2012-05-22 20:03 tmpfile_symlnk -> tmpfile # chown -h root:friends tmpfile_symlnk # ls -l tmpfile_symlnk lrwxrwxrwx 1 root friends 7 2012-05-22 20:03 tmpfile_symlnk -> tmpfile
6.ファイルが特定のユーザーによって所有されている場合にのみ、所有者を変更します
chown “–from” フラグを使用すると、そのファイルが特定の所有者によって既に所有されている場合にのみ、ファイルの所有者を変更できます。
# ls -l tmpfile -rw-r--r-- 1 root friends 0 2012-05-22 20:03 tmpfile # chown --from=guest himanshu tmpfile # ls -l tmpfile -rw-r--r-- 1 root friends 0 2012-05-22 20:03 tmpfile # chown --from=root himanshu tmpfile # ls -l tmpfile -rw-r--r-- 1 himanshu friends 0 2012-05-22 20:03 tmpfile
- 上記の例では、ファイル「tmpfile」の元の所有者/グループが root/friends であることを確認しました。
- 次に、「-from」フラグを使用して所有者を「himanshu」に変更しましたが、既存の所有者が「guest」の場合のみです。
- 現在の所有者は「ゲスト」ではありませんでした。そのため、コマンドはファイルの所有者を変更できませんでした。
- 次に、既存の所有者が「root」である場合に所有者を変更しようとしましたが (これは本当でした)、今回はコマンドが成功し、所有者が「himanshu」に変更されました。
ちなみに、ファイルのパーミッションを変更したい場合は、chmod コマンドを使用する必要があります。
初心者の方は、ファイル許可の基本を読むことから始めてください。
7.ファイルがすでに特定のグループに属している場合にのみグループを変更
ここでもフラグ「–from」が使用されていますが、次のように使用されています:
# ls -l tmpfile -rw-r--r-- 1 himanshu friends 0 2012-05-22 20:03 tmpfile # chown --from=:friends :family tmpfile # ls -l tmpfile -rw-r--r-- 1 himanshu family 0 2012-05-22 20:03 tmpfile
ファイル「tmpfile」は実際にはグループ「friends」に属していたため、条件は正しく、コマンドは成功しました。
したがって、フラグ「–from=:
注:テンプレート「–from=<条件付き所有者名>:<条件付きグループ名>」に従うことで、所有者とグループの両方に条件を適用できます。
8.所有者/グループ設定をあるファイルから別のファイルにコピー
これは、「–reference」フラグを使用することで可能になります。
# ls -l file -rwxr-xr-x 1 himanshu family 8968 2012-04-09 07:10 file # ls -l tmpfile -rw-r--r-- 1 root friends 0 2012-05-22 20:03 tmpfile # chown --reference=file tmpfile # ls -l tmpfile -rw-r--r-- 1 himanshu family 0 2012-05-22 20:03 tmpfile
上記の例では、最初に参照ファイル「file」の所有者/グループを確認し、次にターゲット ファイル「tmpfile」の所有者/グループを確認しました。どちらも違いました。次に、「–reference」オプションを指定して chown コマンドを使用し、所有者/グループの設定を参照ファイルからターゲット ファイルに適用しました。コマンドは成功し、「tmpfile」の所有者/グループ設定は「file」と同様になりました。
9.ディレクトリを再帰的に移動して、ファイルの所有者/グループを変更します
これは「-R」オプションによって可能になります。
# ls -l linux/linuxKernel -rw-r--r-- 1 root friends 0 2012-05-22 21:52 linux/linuxKernel # ls -l linux/ubuntu/ub10 -rw-r--r-- 1 root friends 0 2012-05-22 21:52 linux/ubuntu/ub10 # ls -l linux/redhat/rh7 -rw-r--r-- 1 root friends 0 2012-05-22 21:52 linux/redhat/rh7 # chown -R himanshu:family linux/ # ls -l linux/redhat/rh7 -rw-r--r-- 1 himanshu family 0 2012-05-22 21:52 linux/redhat/rh7 # ls -l linux/ubuntu/ub10 -rw-r--r-- 1 himanshu family 0 2012-05-22 21:52 linux/ubuntu/ub10 # ls -l linux/linuxKernel -rw-r--r-- 1 himanshu family 0 2012-05-22 21:52 linux/linuxKernel
そのため、ディレクトリ「linux」とその 2 つのサブディレクトリ「ubuntu」と「redhat」内のすべてのファイルの所有者/グループを確認すると、それがわかります。所有者とグループの両方を変更するために、「-R」オプションを指定して chown コマンドを発行しました。コマンドは成功し、すべてのファイルの所有者/グループが正常に変更されました。
10.シンボリック リンク ディレクトリで chown コマンドを使用する
「chown」コマンドを発行して、他のディレクトリへのシンボリック リンクであるディレクトリ内のファイルの所有者/グループを再帰的に変更するとどうなるか見てみましょう。
これは、ディレクトリ「linux」にリンクするシンボリックリンクディレクトリ「linux_symlnk」です(上記の例「9」ですでに使用されています):
$ ls -l linux_symlnk lrwxrwxrwx 1 himanshu family 6 2012-05-22 22:02 linux_symlnk -> linux/
ここで、このシンボリック リンク ディレクトリの所有者を (himanshu から root に) 再帰的に変更します:
# chown -R root:friends linux_symlnk # ls -l linux_symlnk/ -rw-r--r-- 1 himanshu friends 0 2012-05-22 21:52 linuxKernel drwxr-xr-x 2 himanshu friends 4096 2012-05-22 21:52 redhat drwxr-xr-x 2 himanshu friends 4096 2012-05-22 21:52 ubuntu
上記の出力では、ファイルとディレクトリの所有者が変更されていないことがわかります。これは、デフォルトでは「chown」コマンドがシンボリック リンクをトラバースできないためです。これはデフォルトの動作ですが、フラグ「-P」もあります。
11. chown を使用して、シンボリック リンク ディレクトリの所有者/グループを強制的に再帰的に変更する
これは、フラグ -H
を使用して実現できます。# chown -R -H guest:family linux_symlnk # ls -l linux_symlnk/ total 8 -rw-r--r-- 1 guest family 0 2012-05-22 21:52 linuxKernel drwxr-xr-x 2 guest family 4096 2012-05-22 21:52 redhat drwxr-xr-x 2 guest family 4096 2012-05-22 21:52 ubuntu
-H フラグを使用すると、すべてのファイル/フォルダーの所有者/グループが変更されたことがわかります。
12. chown コマンドによって行われたすべての変更を一覧表示
以下に示すように、詳細オプション -v を使用すると、ファイルの所有権が変更されたか保持されたかが表示されます。
# chown -v -R guest:friends linux changed ownership of `linux/redhat/rh7' to guest:friends changed ownership of `linux/redhat' retained to guest:friends ownership of `linux/redhat_sym' retained as guest:friends ownership of `linux/ubuntu_sym' retained as guest:friends changed ownership of `linux/linuxKernel' to guest:friends changed ownership of `linux/ubuntu/ub10' to guest:friends ownership of `linux/ubuntu' retained as guest:friends ownership of `linux' retained as guest:friends