umask不是设置默认权限,而是从系统内置最大权限中屏蔽权限位:文件起点666(强制无x位),目录起点777(必须有x位);实际权限=666−umask(文件)或777−umask(目录),推荐八进制减法计算。

umask 不是“设置默认权限”,而是定义创建文件或目录时自动屏蔽哪些权限位。它不直接赋予权限,而是从系统内置的“最大允许权限”中按位屏蔽掉部分权限,最终得到实际权限。理解这个逻辑,才能科学计算、准确预判结果。
文件和目录的起点权限不同
这是计算的前提,也是最容易混淆的地方:
- 普通文件起点是 666(即 -rw-rw-rw-),且内核强制不带任何执行位(x),哪怕 umask=000,结果仍是 666,不会变成 777
- 目录起点是 777(即 drwxrwxrwx),因为执行位(x)对目录表示“可进入”,属于必要权限,所以保留
实际权限的两种等效计算方式
日常使用中,推荐用八进制减法,简单直观;底层原理是二进制按位与运算(666 & ~umask / 777 & ~umask),但结果一致:
- 新建文件权限 = 666 − umask(如 umask 022 → 666−022 = 644)
- 新建目录权限 = 777 − umask(如 umask 022 → 777−022 = 755)
- 注意:减法按位进行,不是十进制数学减法,但对标准 umask 值(每位 0–7)效果相同
常见 umask 值对应的实际权限
选值需兼顾安全与协作,不同场景适用不同策略:
- umask 022(root 默认)→ 文件 644(-rw-r--r--),目录 755(drwxr-xr-x):适合服务环境,他人只读不写
- umask 002(普通用户常用)→ 文件 664(-rw-rw-r--),目录 775(drwxrwxr-x):组内可协作编辑
- umask 007→ 文件 660(-rw-rw----),目录 770(drwxrwx---):组内共享,其他人完全隔离
- umask 077→ 文件 600(-rw-------),目录 700(drwx------):最严格,仅属主可访问
验证与生效控制
设完 umask 后必须验证,避免配置未生效或理解偏差:
- 查当前值:
umask(八进制)或umask -S(符号形式,如 u=rw,g=r,o=r) - 临时生效:直接运行
umask 002,仅当前 shell 有效 - 永久生效:把
umask 002加入~/.bashrc(单用户)或/etc/profile(全局),然后source ~/.bashrc或重新登录 - 实测验证:用
touch f && mkdir d && ls -l查看权限是否匹配预期











