繁體中文

開發者工具 · Chmod 計算器

為什麼 chmod 使用八進位:base-8 簡寫及其來源

· 背景

chmod UNIX 存取控制

八進位分組顯示為不同的 Unix 權限位圖
原始 ToolAcre 向量圖

八進位看起來很隨意,直到您注意到一位數字恰好包含三位。這篇文章解釋了 8 基數和 rwx 之間的配合、DEC 時代使八進制自然化的習慣以及前導零約定。

為什麼 755 而不是 493 — 十進制中的相同模式對任何人來說都沒有任何意義,八進制獲勝是有原因的

十進位值 493 和八進位 755 可以表示相同的整數,但 755 直接公開權限分組。每個顯示的數字對應一類,每一類恰好包含三個二元選擇。計算器根據算術擬合進行工作;它不需要歷史故事來說明為什麼八進制對於 rwx 模式是可讀的。

輸入755,輸出變為rwxr-xr-x。擁有者收到 7、群組 5 和其他 5。將相同的整數轉換為未分組的十進位標籤將隱藏這些類別邊界。這解釋了該符號在已實現的模型中的有用性,但沒有說明為什麼每個外部命令或平台都採用它。

每個數字三位 - 基底 8 如何將二進位分組為與 r、w 和 x 完全對齊的三元組

八進制數字涵蓋從 0 到 7 的值,恰好是加權為 4、2 和 1 的三個獨立位的可用總數。這些組合清晰地映射:0 是 ---、1 是 --x、2 是 -w-、3 是 -wx、4 是 r--、5 是 r-x、6 是 rw-、7 是 rwx。

因此,三個普通數字與所有者、群組和其他對齊。對於 640,二進位三元組是 110、100 和 000,產生 rw-r-----。複選框矩陣使相同的分組可見,而不需要二進位符號。變更一項權限僅變更相應的類別總數及其關聯的符號位置。

硬體習慣-早期 Unix 運作的 DEC 機器是以八進位記錄的,因此程式設計師已經考慮過它

儲存庫來源不建立八進位表示法的硬體沿襲。它們包含 JavaScript 位元遮罩、解析器規則、測試和使用者介面控件,而不是早期處理器或開發環境的檔案。任何關於特定機器文化導致採用的說法都需要超出本文允許的檔案的歷史證據。

來源支持的解釋是算術。三位有八種可能的組合,因此一位八進制數字捕獲一個 rwx 三元組,而不會跨越類邊界。這種關係可以在每個計算器結果中得到證明。無論最終是否從主要來源提供更廣泛的歷史記錄,它仍然有效。

硬體歷史記錄不是由儲存庫來源建立的

解析器接受一到四個八進制數字並去除可選的 0o 前綴。因此,644、0644 和 0o644 都解析為相同的值。數字 8 和 9 被拒絕並給出具體解釋,因為它們都不屬於基數 8,並格式錯誤的文字不會被猜測為有效模式。

前導有效數字攜帶特殊位元而不是另一個普通類別。它的 4、2 和 1 權重代表 setuid、setgid 和 Sticky,而尾隨數字保留所有者、群組和其他。當沒有設定特殊位元時,格式化程式顯示三位數字,當需要一位時,格式化程式顯示四位數字,除非明確要求四位數字輸出。

此解析器中接受的前導形式和特殊位元數字

透過三元組轉換 0644 得到 6、4 和 4。在二進位中,它們是 110、100 和 100,因此符號結果是 rw-r--r--。擁有者俱有讀寫權限,而群組和其他人具有唯讀權限。每個視圖都源自相同的整數,從而允許直接進行一致性檢查。

顛倒過程會得到相同的結果。以 rw-r--r-- 開頭,為擁有者新增 4 和 2,為群組新增 4,為其他新增 4。這些數字是 644。解析器接受的可選前導零不會添加特殊位元;它保持數值不變。

為什麼十六進制從未佔據主導地位 - 兩個十六進制數字不能乾淨地分為三類

十六進位可以對整數進行編碼,但其四位數字邊界與三位權限類別不一致。這是算術比較,而不是人們歷史上喜歡哪一種符號的證據。此計算器不接受十六進位輸入,其輸出是圍繞八進位數字、符號位置和命名布林控制項設計的。

例如,普通權限佔用九位,自然可見為三個八進位群組。將相同的位元分組為四位元區塊將跨數字邊界分割 rwx 類別。這使得十六進制對於這種顯示目的不太透明,但僅從該觀察結果並不能得出有關採用、標準或命令列歷史的宣告。

十六進位比較是算術,不是歷史採用的證據

來自其他語言或系統介面的命名常數在此 JavaScript 實作之外。儲存庫使用自己的描述性屬性,例如ownerRead、groupWrite、otherExecute、setuid、setgid 和sticky。這些名稱使內部位元算術可讀,而無需宣告與特定外部標頭或 API 的等效性。

保持在工具可以驗證的範圍內:提供的模式的數值、其類別布林值、符號渲染、解釋和產生的命令文字。瀏覽器頁面不會檢查目標平台或編譯本機常數。任何將結果翻譯成另一個程式設計介面的人都應該單獨查閱該介面的權威檔案。

命名 C 常數在此 JavaScript 實作之外

八進位適合此計算器,因為每個權限類別都是三位數量,每個八進位數字恰好攜帶三位。對應關係是可見的、可逆的且易於測試。特殊位元使用具有相同 4、2 和 1 模式的第四個數字,而符號 s、S、t 和 T 保留其執行位置詳細資訊。

使用符號作為複習輔助工具,而不是咒語。將數值分為所有者、群組、其他和任何特殊前綴;驗證字母和方框;然後根據實際所有權和工作量證據來決定適用性。該算術完全解釋了分組,沒有關於硬體歷史、標準或通用政策的不受支援的宣告。