Linux / Shell

umask 计算器

输入掩码及程序请求的创建权限,同时比较文件与目录结果,并展开逐位计算过程。

umask 计算器

掩码与创建请求

权限计算结果

掩码:将清除的位
0022 · ----w--w-
允许权限(umask -S)
u=rwx,g=rx,o=rx

文件

0644 · rw-r--r--

实际移除: 0022 · ----w--w-

查看位运算步骤
请求位
0666 · 110 110 110
掩码:将清除的位
0022 · 000 010 010
允许位(~mask & 0777)
0755 · 111 101 101
结果位
0644 · 110 100 100

结果位必须同时满足:已请求,且未被掩码屏蔽。

0666 & (~0022 & 0777) = 0644

目录

0755 · rwxr-xr-x

实际移除: 0022 · ----w--w-

查看位运算步骤
请求位
0777 · 111 111 111
掩码:将清除的位
0022 · 000 010 010
允许位(~mask & 0777)
0755 · 111 101 101
结果位
0755 · 111 101 101

结果位必须同时满足:已请求,且未被掩码屏蔽。

0777 & (~0022 & 0777) = 0755

所有计算均在浏览器中进行,不上传或保存输入。

示例与输入规则

符号掩码表示允许位:u=rwx,g=rx,o=rx 等价于 022,三类用户必须全部声明。

仅按给定请求权限计算,不模拟默认 ACL 或创建后的权限修改。

权限计算完成。

umask 计算器适合排查同一进程新建的文件和目录为何权限不同。先保留常见的 0666 与 0777 请求值,再改成应用实际传入的权限,才能解释你看到的差异。

掩码只能清除请求中已有的位,不能添加权限。文件通常不请求执行位,但这是创建程序的选择,并不意味着所有程序都只能请求 0666。

为什么使用 umask 计算器

同一掩码,不同起点

umask 计算器把文件与目录的请求权限分开显示。选择 111 示例时,文件请求 666,结果仍为 666;目录请求 777,则失去执行位。对照这两个结果,就能看出普通减法为什么不可靠。

文件与文件夹经过同一层筛选,各自保留原有的权限格。

允许通过,不等于已经拥有

umask 计算器将掩码允许的位和程序请求的位分开。把文件请求改为 777,执行位可以保留;请求仍为 666 时则不会凭空出现。结果取决于两者交集。

两层权限格叠合,仅共同存在的格子留在结果中。

先确认请求值,再看掩码

01

用奇数掩码发现差异

在示例选择中选 111,再点击载入示例查看预览。应用后文件结果保持 0666;预览会列出改变的字段数,撤销可以一起恢复输入和原结果。

02

分清两种符号输入

掩码栏接受完整的 umask -S 形式,例如 u=rwx,g=rx,o=rx。文件和目录请求栏接受 rw-rw-rw- 这样的九位符号权限。前者表示允许位,后者表示请求位。

03

手动对照多个改动

关闭自动计算后,可一次修改多个字段。修改会立即禁用导出;点击计算或按 Ctrl/Cmd+Enter 后更新。展开位运算步骤,检查每个操作数,再复制结果。

逐位看清哪些权限被保留

分别设置创建请求

文件默认权限按 0666 请求计算,目录默认按 0777。两项都可以修改:创建可执行文件的程序可能请求 0777,创建私密文件的程序可能只请求 0600。

同时展示数字与符号

八进制掩码表示要清除的位;完整 u=、g=、o= 形式表示允许通过的符号权限。输出统一为四位八进制和九位 rwx,按所有者、组、其他用户分组。

展示真正移除的位

步骤展示请求位、掩码位、低九位取反和按位与结果,还单独列出实际移除的权限。如果请求中本来没有某个位,掩码中的对应位不会造成额外变化。

计算范围与真实系统的差别

只处理九个普通权限位
数字输入接受三位八进制,或首位为 0 的四位写法;请求栏还接受九位 rwx。拒绝特殊位、文件类型前缀和 ACL 后缀。输入两端空白会移除,每栏最多 128 个字符。
符号声明必须完整
掩码必须恰好包含一次 u、g、o,三段顺序可换,每段权限按 rwx 顺序书写,也可为空。不解析 g+w 等相对表达式、a= 简写或 g=u 权限复制。
不模拟 ACL 与文件系统
结果假设使用普通掩码计算。Linux 父目录有默认 ACL 时会采用另一条权限继承路径;特殊位继承、后续 chmod、挂载选项及应用行为也可能改变实际结果。
正向试算,不修改系统
不从目标文件权限反推唯一掩码:请求 0666 时,026 和 027 都能得到 0640。页面不会修改现有文件、执行命令、写入 shell 配置,也不会保存输入。

umask 计算器常见问题

为什么有些 umask 值看起来没有生效?

只有请求中存在的位才会被清除。对于 0666 请求,026 和 027 都得到 0640,因为两种掩码不同的那个执行位本来就不存在。正确算法是与掩码取反值做按位与,不是普通减法。

为什么 umask 不能给普通新文件增加执行权限?

常用新建文件命令请求 0666,其中没有执行位,umask 不能补上它。但创建可执行文件的程序可以请求 0777;在文件请求栏输入这个值,就能看到执行位是否被保留。

umask 输出 0022 时,前面的 0 是什么意思?

本工具中 0022 与 022 等价。前导 0 不表示第四类用户;第四位只允许为 0,1022 等包含特殊位的输入会报错,不会悄悄截掉高位。

如何理解 umask -S 输出的符号权限?

它显示的是掩码允许保留的权限。u=rwx,g=rx,o=rx 对应允许值 0755、掩码 0022;这不代表请求 0666 的文件也会获得执行位。

默认 ACL 会怎样影响 umask?

在 Linux 中,父目录默认 ACL 会被继承,再由请求权限进一步限制,此时不走普通 umask 计算。本工具没有 ACL 输入,因此结果只适用于普通掩码路径。

权限结果不符合预期?

换一组请求权限试算

umask 计算器帮助你把程序请求与掩码效果放在一起核对。解释真实文件权限前,先确认程序究竟请求了什么,以及父目录是否存在默认 ACL。