私が知っている限り、GNU / Linuxではファイル権限をファイル権限とも呼びます。モデルそして「マスク」という用語は、少なくとも次のような他の意味を意味することができます。
- これマスクシェル組み込み(一般的な意味)。
- これマスクシェル組み込み応答システムコール。
- これマスクそのコマンドはシェルに組み込まれています
umask
。 - シェルプロシージャの値は次のように知られています。ファイル生成マスク、またビットマスクそうでなければマスク。
- ユーザー固有のファイルは、そのユーザーに固有のプロセスに影響を与えるマスクを作成します。ユーザーマスク→ユーザーのファイル作成マスク)。
これマスク内蔵ケース
1つは利用可能ですマスクumask
適切な引数を使用してコマンドを実行してシェルを構築します。
これにより、マスク現在のためにシェルプロセスツリー;
現在、シェルプロセスツリー内のすべてのユーザーまたは私たち自身のユーザーに対して、通常、
これらの変更は新しいプロセスに継承されます。おそらく別の殻になるでしょう。)。
数学的論理の基礎
私は理解数学的論理包含作業接続会社また〜として知られています安定(∧
)は以下を基準とする。マスクケース内蔵。したがって:
オペランドのセットに対して true です。そして、もし、すべてのオペランドが真です。
そして同じ名前の人がいることがわかりました。ビット単位の演算このロジックに基づいています。 Andingは、x + y → z
数値を加算する()または文字列を連結する()とは異なりますx alongside y → xy
。
私の質問
次のように「パターンをマスク」することが可能であることがわかります。
OCTAL BINARY HUMAN-READABLE
0666 0110110110 -rw-rw-rw-
∧ 0555 0101101101 -r-xr-xr-x
0444 0100100100 -r--r--r--
しかし、これが正しいかどうかはわかりません。
私の質問
ブロックモードとは何ですか?どのように実装しますか0666 ∧ 0555 → 0444
?
ベストアンサー1
umask
、シェルコマンド、umask
、関数、すべてとも呼ばれるファイル生成マスクを設定しますumask
。
あなたはそれを次のように書き直しました
Aは、
umask
シェル組み込みコマンドとそのコマンドに基づいており、通常呼び出される変数を含むシェル関数を表します。ファイル生成マスクその価値はビットマスクそうでなければマスク。
これは多くの点で正しくありません。
- この
umask
関数はシェル関数ではありません。上記のリンクを参照してください。 - この関数には変数はありません。現在のプロセスのファイル生成マスクを設定します。
- に基づく価値はよく言及される「ファイル生成マスク」としてはいファイル生成マスク(対応する値は「ビットマスク」または「マスク」と呼ばれません)
ㅏマスク変更される可能性がある他のシェルを含む、現在のプロセスツリーの一部のユーティリティに影響を与えます(したがって、シェルYにシェルXのマスクが必ずしも存在する必要はありません)。
マスクは通常影響を与えません。ファイル生成マスク現在のプロセスに影響を与え、継承されます。みんな新しく作成されたサブプロセス。子プロセスは自由に変更することができます。
このファイル作成マスクは、新しく作成されたファイルの権限に従って機能します。ファイルモードとも呼ばれるファイル権限は、ファイル所有者、グループ、およびその他のユーザーに対する12ビットでエンコードされたアクセス権のセットです。この標準的な回答もっと学ぶ。通常、4桁または3桁の8進値で表されます。それらいいえビットストリーム。
新しく作成されたファイルに対する権限は、そのファイルを生成したプログラムによって指定またはデフォルトで指定されます(つまりファイルの生成に使用する関数によって指定されます。前者の例には、以下を使用してファイル(またはディレクトリ)を生成するプログラムがあります。open
またはcreat
またはmkdir
、必要なモードを明示的に指定する必要があります。後者の例には、以下を使用するプログラムがあります。fopen
ここで、ファイルはデフォルトの0666モードで終了します。現在umask
の値はこのモードをマスクします。
あなたはそれを次のように書き直します
これは多くの点で正しくありません。
- 要求されたパターンにマスクを適用した後ではなく、ファイルを生成する前に適用してください。
mkdir
(ユーティリティではない機能ですが、同じ名前のユーティリティにも同じことが当てはまります)いいえファイル生成マスクは無視されます。
umask
考慮すると、結果パターンは、要求されたパターンにビットマスクとしてumaskを適用した結果です。要求されたパターンに設定された各ビットは、対応するビットと比較して検証され、umask
後者が設定されていない場合にのみ保持されます。バイナリ演算の場合、要求されたパターンANDの補数はビットANDedですumask
。したがって、umask
モード0666の0022は減算ではなく、0666と0755(0022の補数)が0644であるため、0644を提供します。同様に、umask
モード0666を使用した0011の結果は0666です。
計算プロセスをもう少し詳しく見てみましょう。リンクされた回答に含まれるマイナスで表されることが多いが、umask
マスクとして使用されないことを理解することが重要です。したがって、値0022が適用されます。
Octal Binary
Mode 0666 000110110110
Mask 0022 000000010010 Bits set here mask bits above
Result 0644 000110100100
Octal Binary
Mode 0644 000110100100
Mask 0022 000000010010
Result 0644 000110100100
これは通常、パターンをマスクの補数とビット単位のANDとして計算します。
Octal Binary
Mask 0022 000000010010
Compl. 7755 111111101101
Mode 0666 000110110110
Result 0644 000110100100
chmod
に関係なく、コマンドラインで指定されたモードを適用しますumask
。ファイルを生成するときでも、他のツールを使用してこれを行うことができます。したがって、権限を維持するように指示された場合、権限は関係なくコピーまたは復元されcp
ます。tar
umask
この回答詳細については。
最後の質問は
私の理解は十分に正確ですか?どのように0666∧0555→0444になりますか?
最初の質問に対する答えは明らかに「いいえ」です。 2番目の質問に対する答えは、それがビット合計がどのように機能するかであるためです。オペランドを2進数で書き換えます。
Octal Binary
0666 000110110110
0555 000101101101
次に、各ビット位置に対してビットごとのANDを実行します。これは、垂直に整列された各ビットペアを取ることを意味します。
000100100100
(0∧0は0、0∧1は0、1∧0は0、1∧1は1です)。上記の内容を8進数に変換すると0444になります。