umask不直接赋予权限,而是从默认权限中屏蔽位:文件基础为0666(无x)、目录为0777(必须含x);真实计算为默认权限 & (~umask),如umask 002得文件0664、目录0775。

umask 不直接“赋予”权限,而是从系统预设的最大权限中屏蔽掉某些位。它对文件和目录的影响不同,关键在于默认基础值和内核的执行权限限制。
文件和目录的默认基础权限不同
新建普通文件的默认权限是 666(即 rw-rw-rw-),但内核强制不赋予执行位(x),所以即使 umask 是 000,文件也永远不会自动带 x 权限。新建目录的默认权限是 777(即 rwxrwxrwx),且必须保留执行位——没有 x 就无法进入目录,因此目录权限始终可能含 x。
umask 的真实计算方式是位运算
实际权限 = 默认权限 & (~umask),不是简单相减。例如 umask 002:
- 文件:0666 & ~0002 = 0666 & 0775 = 0664(rw-rw-r--)
- 目录:0777 & ~0002 = 0777 & 0775 = 0775(rwxrwxr-x)
注意:~0002 在八进制中对应 0775,这是取反后的掩码值,不是最终权限。
常见 umask 值对应的实际效果
不同 umask 值会显著改变协作或安全场景下的默认行为:
- 022:文件 644(rw-r--r--),目录 755(rwxr-xr-x)——适合公开服务,组和其他用户只读
- 002:文件 664(rw-rw-r--),目录 775(rwxrwxr-x)——适合团队开发,同组可写
- 077:文件 600(rw-------),目录 700(rwx------)——严格私有,仅属主访问
- 007:文件 660(rw-rw----),目录 770(rwxrwx---)——组内共享,其他人无任何权限
设置 umask 要区分作用范围
临时设置只影响当前终端;永久生效需写入配置文件:
- 当前会话:运行 umask 002
- 用户级永久:在 ~/.bashrc 或 ~/.profile 中添加 umask 002,再执行 source ~/.bashrc
- 系统级统一:修改 /etc/login.defs 中的 UMASK 行,或通过 PAM 模块 pam_umask.so 控制


















