助け合いフォーラム
正解
umask 077
解説
ファイルやディレクトリを新規作成した際の、デフォルトのパーミッションを設定するにはumaskコマンドを利用します。
umaskコマンドの書式は以下のとおりです。
umask [マスク値]
umaskコマンドではマスク値というものを設定して、新規に作成するファイルとディレクトリのデフォルトのパーミッションを決定します。マスク値はユーザ毎に指定できます。通常「/etc/bashrc」などに設定されており、シェルの起動時にシステムのデフォルト値に戻ります。
マスク値が0の場合に使用されるデフォルトのパーミッションは、ファイルが「666」、ディレクトリが「777」です。これらの値から、指定したマスク値を引いた値が新たなデフォルトのパーミッションとして設定されます。
666 - マスク値 = ファイルのデフォルトのパーミッション
777 - マスク値 = ディレクトリのデフォルトのパーミッション
パーミッションの表記は各桁が独立して、左から所有ユーザ、所有グループ、その他のユーザを表します。ですのでumask値を引く際も各桁ごとに引きます。
なお、ファイルのデフォルトのパーミッションは「666」で実行権が無いので、umask値に関わらず実行権は設定されません。
上図より、666を600、777を700にするマスク値は077です。
したがって正解は
・umask 077
です。
以下は実行例です。
umaskと単体で実行すると現在のumask値を表示します。
その他の選択肢については以下のとおりです。
・umask 700
ファイルは「066」、ディレクトリは「077」がデフォルトのパーミッションになりますので、誤りです。
・umask 770
ファイルは「006」、ディレクトリは「007」がデフォルトのパーミッションになりますので、誤りです。
・umask 047
ファイルは「620」、ディレクトリは「730」がデフォルトのパーミッションになりますので、誤りです。
・umask 066
ファイルは「600」、ディレクトリは「711」がデフォルトのパーミッションになりますので、誤りです。
参考
パーミッションとは、ファイルやディレクトリに対する権限です。権限には「読み取り権」「書き込み権」「実行権」の3種類があります。
これらの権限は、「所有ユーザ」(ファイルの所有ユーザ)、「所有グループ」(ファイルの所有グループ)、「その他のユーザ」(所有ユーザ、所有グループ以外のユーザ)のそれぞれに対して設定されます。
誰がどのような権限を持つのか、パーミッションの表現方法には「記号表現」と「数値表現」の2つがあります。
例えば、以下のような表現があったとします。
左から順に「所有ユーザ」「所有グループ」「その他のユーザ」の権限を表しています。記号表現の「-」は権限が無い事を意味します。
「所有ユーザ」の権限は数値表現で6ですが、これは読み取り権(4)と書き込み権(2)の数値を足したもので、それらの権限がある事を表しています。
つまりこれは、「所有ユーザ」に「読み取りと書き込み」の権限、「所有グループ」「その他のユーザ」には「読み取り」の権限のみが与えられている事がわかります。
全てのユーザに「読み取り」「書き込み」「実行」の権限がある場合は、以下のように表現されます。
なおそれぞれの権限は、ファイルに適用した場合とディレクトリに適用した場合では、それぞれ許可される内容が異なりますので、注意して下さい。
試験では主にファイルに適用した場合について問われます。
パーミッションの変更について
初歩的かもしれませんが質問失礼いたします。
ファイルのデフォルトのパーミッションについてです。
「パーミッションの表記は各桁が独立して、左から所有ユーザ、所有グループ、その他のユーザを表します。ですのでumask値を引く際も各桁ごとに引きます。」とあります。
666-77は各桁が独立し計算されるので6-7でマイナスの値を取る際もエラーや繰り下げが起こるわけではなく6-7=0となり、666→600となるということでしょうか?
裏を返せば設問の選択肢外ですが、umask 088というコマンドを打っても成立しますでしょうか?
宜しくお願いいたします。
問題の解説で紹介されている
666 - マスク値 = ファイルのデフォルトのパーミッション
777 - マスク値 = ディレクトリのデフォルトのパーミッションパーミッションの表記は各桁が独立して、左から所有ユーザ、所有グループ、その他のユーザを表します。ですのでumask値を引く際も各桁ごとに引きます。
というのは実は正確な説明ではなく、正確には引き算ではなく論理演算(ビットを反転して論理積をとる)を行います。
引き算を使うのは便宜上の説明なので、「6-7はマイナスだから…」のように考え出すと???となります。
ひとまずはそういうものだと覚えておいて、興味がわいたら論理演算について学習してみてください。
裏を返せば設問の選択肢外ですが、umask 088というコマンドを打っても成立しますでしょうか?
umask に指定するのは8進数であり、8進数に8は使えませんので、設定しようとすると
$ umask 088
-bash: umask: 088: octal number out of range
のようにエラーになりますね。
コメント
この投稿に対して返信しませんか?
y ysatoag
2023/01/23 22:06
tnishita2様 早い回答大変ありがとうございます。 まさか単純な引き算ではなく論理演算が根底にあるとは初耳でした。 調べて実際に計算してみると確かに両方ともumask077で700と600と答えが出ました! 2進数にしたときに気づいたのですが、これパーミッションの2進数の値ががそれぞれの所有ユーザ、所有グループ、その他のユーザのrwxに対応していて、01でOnOffの意があるのですね。 とにかくより深い学びと新しい発見がありました。 教えて頂きありがとうございました!