开发者工具 · Chmod 计算器
为什么 chmod 使用八进制:base-8 简写及其来源
· 背景
chmod UNIX 访问控制
八进制看起来很随意,直到您注意到一位数字恰好包含三位。这篇文章解释了 8 基数和 rwx 之间的配合、DEC 时代使八进制自然化的习惯以及前导零约定。
为什么 755 而不是 493 — 十进制中的相同模式对任何人都没有任何意义,八进制获胜是有原因的
十进制值 493 和八进制 755 可以表示相同的整数,但 755 直接公开权限分组。每个显示的数字对应一类,每一类恰好包含三个二元选择。计算器根据算术拟合进行工作;它不需要历史故事来说明为什么八进制对于 rwx 模式是可读的。
输入755,输出变为rwxr-xr-x。所有者收到 7、组 5 和其他 5。将相同的整数转换为未分组的十进制标签将隐藏这些类边界。这解释了该符号在已实现的模型中的有用性,但没有说明为什么每个外部命令或平台都采用它。
每个数字三位 - 基数 8 如何将二进制分组为与 r、w 和 x 完全对齐的三元组
基数为 8 的数字涵盖从 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 保留其执行位置详细信息。
使用符号作为复习辅助工具,而不是咒语。将值分为所有者、组、其他和任何特殊前缀;验证字母和方框;然后根据实际所有权和工作量证据来决定适用性。该算术完全解释了分组,没有关于硬件历史、标准或通用政策的不受支持的声明。