ブロックモードとは何ですか?

ブロックモードとは何ですか?

私が知っている限り、GNU / Linuxではファイル権限をファイル権限とも呼びます。モデルそして「マスク」という用語は、少なくとも次のような他の意味を意味することができます。

  1. これマスクシェル組み込み(一般的な意味)。
  2. これマスクシェル組み込み応答システムコール
  3. これマスクそのコマンドはシェルに組み込まれていますumask
  4. シェルプロシージャの値は次のように知られています。ファイル生成マスク、またビットマスクそうでなければマスク
  5. ユーザー固有のファイルは、そのユーザーに固有のプロセスに影響を与えるマスクを作成します。ユーザーマスク→ユーザーのファイル作成マスク)。

これマスク内蔵ケース

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の値はこのモードをマスクします。

あなたはそれを次のように書き直します

  1. 次のいくつかのユーティリティmkdir独立モードでファイルを作成します(マスクは無視されます)。
  2. 一部のユーティリティの使用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ます。tarumask

この回答詳細については。

最後の質問は

私の理解は十分に正確ですか?どのように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になります。

おすすめ記事