umask通过屏蔽默认权限位控制新建文件和目录权限:文件基础权限666、目录777,umask 022得644/755,umask 002得664/775;临时设置用umask命令,永久设置写入~/.bashrc或系统配置文件。

直接改 umask 就能控制新创建文件和目录的默认权限,但必须理解它不是“加权限”,而是“屏蔽掉哪些权限”——错用会导致文件意外可写、目录不可进入,甚至协作环境里组员互相删不了对方文件。
umask 022 和 002 的实际权限差异
别只记数字,要看它真正砍掉了什么:
-
umask 022:文件从666屏蔽掉 group/others 的写位 →644(rw-r--r--);目录从777屏蔽掉 group/others 的写位 →755(rwxr-xr-x) -
umask 002:文件变成664(rw-rw-r--),目录变成775(rwxrwxr-x)——组内成员可写,适合共享工作目录 - 注意:
umask不影响执行位。哪怕你设umask 000,新创建的普通文件也不会有x权限,因为系统默认就不用666而是666 & ~111 = 666(111是执行位掩码),但目录始终保留x
临时设置 vs 永久生效的配置位置
临时改只对当前终端有效,关了就丢;永久改要写进 Shell 初始化文件,但别乱动系统级文件:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 临时生效:直接运行
umask 002,立刻生效,适合调试或单次协作任务 - 用户级永久:追加到
~/.bashrc或~/.profile(推荐前者),然后source ~/.bashrc - 系统级慎用:修改
/etc/profile或/etc/bash.bashrc会影响所有用户,普通用户没权限;若真要全局统一,优先在/etc/profile.d/下新建umask.sh并确保可读 - 注意:SSH 登录、GUI 终端、systemd 用户服务加载的 Shell 可能读不同配置文件,
~/.bashrc对交互式非登录 Shell 更可靠
umask -S 输出看不懂?符号模式怎么对应八进制
umask -S 显示的是“被屏蔽的权限”,不是最终权限,容易看反:
-
umask 002执行umask -S输出u=rwx,g=rwx,o=rx—— 意思是:owner 和 group 不屏蔽任何权限(即允许 rwx),others 屏蔽了w(只剩rx) -
umask 077输出u=rwx,g=,o=—— group 和 others 全部权限都被屏蔽,只留 owner 自己能读写执行 - 符号模式不能直接用于脚本赋值,
umask u=rwx,g=rx,o=rx是非法语法;必须用八进制(如022)或完整符号串加-S配合umask命令解析(不推荐)
为什么 mkdir 后权限不对?常见踩坑点
很多问题不是 umask 没设对,而是忽略了上下文干扰:
- 某些编辑器(如 vim、nano)或工具(如 git、rsync)创建文件时会绕过
umask,直接按硬编码权限或继承父目录setgid位生成 - 如果父目录设置了
setgid(drwxr-sr-x),新创建的子目录会自动继承组,但umask仍决定组是否有写权——此时umask 002才能让组内成员互写 -
umask不影响已有文件。刚改完umask就去ls看老文件?权限不会变。它只管“下一个touch、mkdir、cp、tar -x” - 容器或 systemd service 中运行的进程,可能使用独立的 Shell 环境,
umask需在 service 文件里显式设置UMask=0002(systemd)或通过入口脚本注入
最常被忽略的一点:umask 是按位屏蔽,不是算术减法;666 - 022 = 644 碰巧成立,但 666 & ~022 才是真实逻辑。一旦遇到像 umask 027 这种跨位组合,靠心算容易出错,建议用 umask -S 验证后再批量创建。










