助け合いフォーラム
正解
chmod -R 755 dir
chmod -R u=rwx,go=rx dir
chmod -R a=rwx,go-w dir
解説
ファイルやディレクトリのパーミッションを変更するにはchmodコマンドを利用します。
chmodコマンドの書式は以下のとおりです。
chmod [-R] パーミッション ファイルまたはディレクトリ
「-R」オプションを使用すると、指定したディレクトリおよびその配下にあるファイルのパーミッションを変更することが出来ます。
パーミッションの指定には数値か記号のどちらかを用います。
・数値の場合
chmod -R 755 dir
・記号の場合
以下の記号を用います。
対象、操作、権限の順に指定します。また「,」を使用して繰り返すことも出来ます。
パーミッションを755に設定するには、所有ユーザ(u)に読み取り(4)、書き込み(2)、実行(1)の権限を設定し、所有グループ(g)とその他のユーザ(o)には読み取り(4)と実行(1)の権限を設定します。
これを記号で表すと「u=rwx,go=rx」となります。
もしくは、一旦全てのユーザ(a)に読み取り(4)、書き込み(2)、実行(1)の権限を設定(a=rwx)してパーミッションを777とし、その後、所有グループ(g)とその他のユーザ(o)から書き込み(2)の権限を削除(go-w)しても755となります。
これを記号で表すと「a=rwx,go-w」となります。
したがって正解は
・chmod -R 755 dir
・chmod -R u=rwx,go=rx dir
・chmod -R a=rwx,go-w dir
です。
その他の選択肢については以下のとおりです。
・chmod 755 dir
・chmod u=rwx,go=rx dir
「dir」ディレクトリのみのパーミッションを変更しますので、誤りです。
・chmod -R +755 dir
現在のパーミッションに755をプラス(+)する意味になります。書式は正しいのですが、755に設定するわけではありませんので、誤りです。
参考
パーミッションとは、ファイルやディレクトリに対する権限です。権限には「読み取り権」「書き込み権」「実行権」の3種類があります。
これらの権限は、「所有ユーザ」(ファイルの所有ユーザ)、「所有グループ」(ファイルの所有グループ)、「その他のユーザ」(所有ユーザ、所有グループ以外のユーザ)のそれぞれに対して設定されます。
誰がどのような権限を持つのか、パーミッションの表現方法には「記号表現」と「数値表現」の2つがあります。
例えば、以下のような表現があったとします。
左から順に「所有ユーザ」「所有グループ」「その他のユーザ」の権限を表しています。記号表現の「-」は権限が無い事を意味します。
「所有ユーザ」の権限は数値表現で6ですが、これは読み取り権(4)と書き込み権(2)の数値を足したもので、それらの権限がある事を表しています。
つまりこれは、「所有ユーザ」に「読み取りと書き込み」の権限、「所有グループ」「その他のユーザ」には「読み取り」の権限のみが与えられている事がわかります。
全てのユーザに「読み取り」「書き込み」「実行」の権限がある場合は、以下のように表現されます。
なおそれぞれの権限は、ファイルに適用した場合とディレクトリに適用した場合では、それぞれ許可される内容が異なりますので、注意して下さい。
試験では主にファイルに適用した場合について問われます。
パーミッションの設定
問題文には「「dir」ディレクトリおよびその配下にあるファイルのパーミッションを755に設定したい。」とあるのですが、
この問題の選択肢の中に「chmod -R +755 dir」という選択肢があり、解説には下記のような説明がありました。
「現在のパーミッションに755をプラス(+)する意味になります。書式は正しいのですが、755に設定するわけではありませんので、誤りです。」
これはどういうことでしょうか。
例えば、ディレクトリdirを作り、その直下にファイルfileを作った後で両方のパーミッションを022に変更してあるとします。
その状態でchmod -R +755 dir
を実行すると、以下のようにdirとfileの両方のパーミッションが777になってしまい755と異なるため不適切です。
ubuntu@ubuntu:~$ mkdir dir
ubuntu@ubuntu:~$ touch dir/file
ubuntu@ubuntu:~$ sudo chmod -R 022 dir/
ubuntu@ubuntu:~$ sudo ls -lR
.:
total 4
d----w--w- 2 ubuntu ubuntu 4096 Mar 13 02:43 dir
./dir:
total 0
-----w--w- 1 ubuntu ubuntu 0 Mar 13 02:43 file
ubuntu@ubuntu:~$ sudo chmod -R +755 dir
ubuntu@ubuntu:~$ ls -lR
.:
total 4
drwxrwxrwx 2 ubuntu ubuntu 4096 Mar 13 02:43 dir
./dir:
total 0
-rwxrwxrwx 1 ubuntu ubuntu 0 Mar 13 02:43 file
コメント
+
のあるなしで挙動が違うんですよね。 +
なしだと
# chmod 222 testfile
# stat testfile | grep Access
Access: (0222/--w--w--w-) Uid: ( 0/ root) Gid: ( 0/ root) ←パーミッションは222
Access: 2023-03-13 17:15:34.725184019 +0900
# chmod 755 testfile
# stat testfile | grep Access
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) ←パーミッションが指定通り755になっている
Access: 2023-03-13 17:15:34.725184019 +0900
で、+
ありだと
# chmod 222 testfile
# stat testfile | grep Access
Access: (0222/--w--w--w-) Uid: ( 0/ root) Gid: ( 0/ root) ←パーミッションは222
Access: 2023-03-13 17:15:34.725184019 +0900
# chmod +755 testfile
# stat testfile | grep Access
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) ←パーミッションが222+755なので777になっている
Access: 2023-03-13 17:15:34.725184019 +0900
と、755のつもりだったのに777になってしまうんですよね。755になって欲しいのに777になるなんて!
コメント
この投稿に対して返信しませんか?
m mumu5gou
2023/03/14 20:46
コメントしていただいた方々ありがとうございました。 おかげで理解することができました。