简体中文

开发者工具 · Chmod 计算器

如何读取 ls -l 权限并将其转换为八进制模式

· 工作原理

chmod UNIX 开发人员工作流程

ls 样式模式字符串显示为不同的 Unix 权限位图
原始 ToolAcre 矢量图

ls -l 开头的十个字符的字符串是文件类型加上九个权限位。这篇文章展示了如何解码它并产生 chmod 想要的八进制模式,包括特殊位字母。

粘贴有 -rw-r-----+ 的票证 — 您需要知道是否告诉用户运行 chmod 640 或其他内容

粘贴的字符串(例如 -rw-r-----+)包含的内容超出了此解析器接受的范围。识别的核心是一个九个字符的权限主体,前面可以选择一个受支持的文件类型字符。尾随的加号会使输入太长而被拒绝。删除该外部标记会留下 -rw-r-----,它会转换为 640:所有者读取 /write, 组读取,其他人没有权限。

除了文章 501 警告长列表可能将其用于 ACL 之外,该转换不会解码加号代表的内容。计算器没有 ACL 条目或掩码。它也不检查票据的机器、所有者、组或路径。因此,模式 640 是接受核心表示的基本权限值,而不是有关有效访问的完整答案。

第一个字符是类型 — 破折号、d、l、c、b、p 和 s,以及为什么它不是模式的一部分

可选的第一个字符被视为类型标记而不是权限位。解析器识别 -、d、l、b、c、p、s、D 和 ?。当一个出现在九个有效权限位置之前时,它将被删除以进行算术运算。生成的所有者、组和其他三元组单独确定八进制值和矩阵选择。

使用等效输入很容易验证此行为。 rwxr-x--- 和 -rwxr-x--- 都产生 750 因为前导破折号不贡献任何模式位。目录标记可以位于相同主体之前,并且仍然产生相同的整数。目标选择器单独控制解释性措辞,因此接受类型字符并不意味着浏览器已发现或打开该对象。

三组中的九个字符 - 所有者、组、其他,始终按 rwx 顺序,每个关闭的位都有破折号

九个权限位置按所有者、组和其他顺序形成三个固定三元组。在每个三元组中,读取占据第一个位置,写入第二个位置,执行第三个位置。破折号表示相应位已关闭。特定于位置的验证会拒绝放错位置的字母而不是猜测,因此写入位置中的 r 不能默默地成为另一个权限。

每个接受的三元组按文章 501 中的权重映射到一位八进制数字:读取为 4,写入为 2,执行为 1。该矩阵显示与复选框相同的标志,并在其中一个发生更改时重建整数。仅在执行位置接受特殊字母,保留 setuid、setgid 或与底层执行状态粘在一起。

工作示例:-rwxr-x--- 到 750 — 将 4、2、1 分配给每个字母并按组求和

通过忽略前导类型标记并将主体拆分为 rwx、r-x 和 --- 来转换 -rwxr-x---。所有者拥有 4+2+1,正在生成 7。组有 4+1,正在生产 5。其他没有启用位,产生 0。计算器返回 750 并选择匹配的九个普通权限框。

反向检查应落在同一文本正文上。输入750,符号字段变为rwxr-x---;为显示的形式选择一个常规文件标记,它会变成-rwxr-x---。作业预览采用不同的语法:u=rwx,g=rx,o=。所有三种观点都描述了一种固定模式,而所有权和应用它的智慧仍然没有解决。

尾随的加号和 at 符号 — + 表示 ACL 条目存在,@ 表示 macOS 上的扩展属性,两者都不属于模式的一部分

尾随的加号和 at 符号是大纲中的元数据标记,但实现的事实更窄:此解析器拒绝其中任何一个,因为接受的输入在权限正文之后结束。文章 501 专门标识了带有 ACL 的尾随加号。 CHMOD_SOURCES 没有为 at 符号提供等效的解释,因此本节不会为其分配存储库不支持的操作系统含义。

当有效访问很重要时,不要盲目地去除任何标记。相反,将接受的九个或十个字符核心分开以进行基本模式转换,并使用来自原始系统的证据调查任何剩余部分。计算器可以显示rw-r-----表示640。它无法解释其他元数据、读取扩展属性或确定其他访问控制机制是否会更改用户或进程可以执行的操作。

尾随的加号和 at 符号是此解析器拒绝的元数据标记

浏览器计算器不运行外部统计命令。该页面没有命令运行程序或文件系统访问权限;它的路径字段的存在只是为了构造带引号的 chmod 文本以供显示。因此,它无法获取当前模式、比较特定于平台的命令输出或证明粘贴的字符串来自特定实用程序。用户必须提供要转换的值。

一旦提供了可信模式,浏览器就会提供独立的表示检查。输入符号核心并比较其八进制结果、矩阵、摘要和作业预览。协议捕获支持格式内的转录和算术错误。它不会验证外部收集命令、揭示所有权或证明所表示的权限对从中复制文本的对象有效。

浏览器计算器不运行外部统计命令

ACL 解码保留在路由之外。其模型包含所有者、组、其他和三个特殊位,没有命名条目或 ACL 掩码。 Windows 权限解码同样不存在:没有 Windows 身份模型、访问控制条目语法或平台发现。九位 Unix 风格的核心可以被转换,但附加的权限系统都不能从该结果中重建。

该边界也限制了诊断。看起来足够的基本模式并不能证明 ACL 或其他策略是不相关的,而限制模式并不能识别每个可能的授权。计算器仅计算十二个代表位。使用其输出精确地说明普通模式,然后保留有关实际公开外部权限系统的工具和文档的有效授权的声明。

ACL 和 Windows 权限解码保留在路由之外

一旦接受的核心被隔离,读取 ls 样式模式就会变得机械化。删除一个已识别的前导类型字符,将剩余的九个位置分为所有者、组和其他,并在每个三元组中总共读取 4、写入 2 并执行 1。计算器执行该转换并验证位置特定的字母,包括实现的 s、S、t 和 T 形式。

保持结论与输入成正比。成功的转换证明接受的字符串一致地映射到八进制模式、矩阵、摘要和生成的赋值。它不运行 stat、检查路径、解码尾随标记、识别所有权或应用 chmod。这些限制使输出变得有用:它对于基本模式算术是精确的,并且对于它从未收集的证据保持沉默。