開発者ツール · Chmod 計算機
chmod が 8 進数を使用する理由: Base-8 の短縮表現とその由来
· 背景
chmod unix アクセス制御
8 進数は、1 桁がちょうど 3 ビットを保持していることに気づくまでは任意に見えます。この記事では、基底 8 と rwx の適合性、8 進数を自然にした DEC 時代の習慣、および先行ゼロ規則について説明します。
なぜ 493 ではなく 755 なのか — 10 進数での同じモードは誰にとっても何の意味も持たず、8 進数が勝つのには理由があります
10 進数の 493 と 8 進数の 755 は同じ整数を表すことができますが、 755 は権限のグループ化を直接公開します。表示される各桁は 1 つのクラスに対応し、各クラスには 3 つのバイナリ選択肢が含まれます。計算機はその算術適合に基づいて動作します。 rwx モードで 8 進数が読み取れる理由を示す歴史的な話は必要ありません。
755 と入力すると、出力は rwxr-xr-x になります。所有者は 7、グループ 5、およびその他の 5 を受け取ります。同じ整数をグループ化されていない 10 進ラベルに変換すると、これらのクラス境界が非表示になります。これは、すべての外部コマンドやプラットフォームがそれを採用した理由を主張することなく、実装されたモデル内でのこの表記法の有用性を説明しています。
1 桁あたり 3 ビット — ベース 8 がバイナリを r、w、x と正確に並ぶトリプルにグループ化する方法
基数 8 の数字は、値 0 から 7 までを表し、重み付けされた 3 つの独立したビット 4、2、および 1 から得られる合計と正確に一致します。組み合わせはきれいにマップされます: 0 は ---、1 は --x、2 は -w-、3 は -wx、4 は r--、5 は r-x、6 は rw-、および7 は rwx です。
したがって、通常の 3 桁の数字が所有者、グループ、その他に対応します。 640 の場合、バイナリ トリプルは 110、100、および 000 となり、rw-r----- となります。チェックボックス マトリックスを使用すると、2 進表記を必要とせずに同じグループを表示できます。 1 つの権限を変更すると、対応するクラスの合計とそれに関連付けられたシンボルの位置のみが変更されます。
ハードウェアの習慣 - 初期の Unix が動作していた DEC マシンは 8 進数で文書化されていたため、プログラマーはすでにそれを考慮していました
リポジトリ ソースは、8 進数表記のハードウェア系統を確立しません。これらには、JavaScript ビット マスク、パーサー ルール、テスト、ユーザー インターフェイス コントロールが含まれており、以前のプロセッサや開発環境のドキュメントは含まれていません。特定のマシン文化が採用の原因となったという主張には、この記事で許可されているファイルを超えた歴史的証拠が必要になります。
ソースに裏付けられた説明は、代わりに算術です。 3 ビットには 8 つの可能な組み合わせがあるため、1 つの基数 8 桁がクラス境界を越えることなく 1 つの rwx トリプルをキャプチャします。その関係は、あらゆる計算結果で実証できます。より広範な歴史的記述が最終的に一次情報源から提供されるかどうかにかかわらず、有効であることに変わりはありません。
ハードウェア履歴がリポジトリ ソースによって確立されていません
パーサーは 1 ~ 4 の 8 進数を受け入れ、オプションの 0o プレフィックスを取り除きます。したがって、644、0644、および 0o644 はすべて同じ値に解決されます。数字 8 と 9 は、どちらも 8 進数に属しておらず、不正な形式のテキストは有効なモードに推測されないため、具体的な説明とともに拒否されます。
先頭の有効数字には、別の通常のクラスではなく特別なビットが含まれます。その 4、2、1 の重みは setuid、setgid、sticky を表し、末尾の数字は所有者、グループ、その他を保持します。フォーマッタは、4 桁の出力が明示的に要求されない限り、特殊ビットが設定されていない場合は 3 桁を表示し、ビットが必要な場合は 4 桁を表示します。
このパーサーで受け入れられる先頭形式と特殊ビットの数字
0644 を 3 倍に変換すると、6、4、および 4 が得られます。バイナリでは、110、100、および 100 であるため、シンボリック結果は rw-r--r-- になります。所有者は読み取りと書き込みができますが、グループとその他の所有者は読み取り専用です。すべてのビューは同じ整数から派生するため、一貫性を直接チェックできます。
プロセスを逆に実行しても、同じ結果が得られます。 rw-r--r-- で開始し、所有者に 4 と 2 を追加し、グループに 4 を、その他に 4 を取得します。数字は 644 です。パーサーが受け入れるオプションの先行ゼロは、特別なビットを追加しません。数値は変更されないままになります。
16 進数が普及しなかった理由 — 2 つの 16 進数が 3 つのクラスにきれいに分割されない
16 進数は整数をエンコードできますが、その 4 ビットの桁境界は 3 ビットの許可クラスと一致しません。これは算術的な比較であり、人々が歴史的にどの表記法を好んだかについての証拠ではありません。この電卓は 16 進数の入力を受け付けず、その出力は 8 進数、記号位置、名前付きブール制御器を中心に設計されています。
たとえば、通常のアクセス許可は 9 ビットを占有し、当然 3 つの 8 進数のグループとして表示されます。同じビットを 4 ビットのチャンクにグループ化すると、rwx クラスが桁の境界を越えて分割されます。このため、この表示目的では 16 進数の透明性が低くなりますが、この観察だけから採用、標準、またはコマンドラインの歴史について主張することはできません。
16 進数の比較は算術演算であり、歴史的な採用の証拠ではありません
他の言語またはシステム インターフェイスの名前付き定数は、この JavaScript 実装の範囲外にあります。リポジトリは、ownerRead、groupWrite、otherExecute、setuid、setgid、sticky などの独自の説明プロパティを使用します。これらの名前により、特定の外部ヘッダーまたは API との同等性を主張することなく、内部ビット算術読み取りが可能になります。
ツールが検証できる内容 (指定されたモードの数値、そのクラスのブール値、シンボリック レンダリング、説明、生成されたコマンド テキスト) の範囲内に留まります。ブラウザー ページは、ターゲット プラットフォームを検査したり、ネイティブ定数をコンパイルしたりしません。結果を別のプログラミング インターフェイスに変換する場合は、そのインターフェイスの信頼できるドキュメントを別途参照する必要があります。
名前付き C 定数は、この JavaScript 実装の外にあります
8 進数は、各権限クラスが 3 ビットの量であり、基数 8 の各桁が正確に 3 ビットを運ぶため、この計算機に適合します。対応関係は目に見え、元に戻すことができ、テストが簡単です。特殊ビットは同じ 4、2、1 パターンの 4 桁目を使用しますが、シンボリック s、S、t、および T は実行位置の詳細を保持します。
この表記は呪文ではなく復習の補助として使用してください。値を所有者、グループ、その他、および特別なプレフィックスに分割します。文字とボックスを確認します。次に、実際の所有権とワークロードの証拠から適合性を判断します。この算術は、ハードウェアの歴史、標準、または普遍的なポリシーに関する裏付けのない主張を含まずに、グループ化を完全に説明します。