在脚本中临时修改umask值只需在开头或需要位置插入umask命令,它仅影响当前脚本运行期间新建文件和目录的权限,不改变全局设置,也不影响父shell或其他进程。

在脚本中临时修改 umask 值很简单,只需在脚本开头或需要的位置插入 umask 命令即可。它只影响该脚本运行期间创建的文件和目录,不会改变系统全局设置,也不影响父 shell 或其他进程。
直接在脚本里写 umask 命令
这是最常用、最可靠的方式。umask 设置会立即生效,并作用于后续所有新建文件和目录:
- 用八进制数值指定,比如
umask 002(组可写)、umask 077(仅属主可读写) - 建议使用四位写法(如
0002),避免因前导零被误解析;实际生效的是后三位 - 放在脚本靠前位置,确保在
touch、mkdir等命令之前执行
验证权限是否按预期生成
设置 umask 后,可通过创建测试文件/目录并检查权限来确认效果:
- 例如:
umask 007 && touch testfile && ls -l testfile应显示-rw-rw---- - 目录权限受同样规则约束:
umask 007 && mkdir testdir && ls -ld testdir应为drwxrwx--- - 注意:文件默认无执行位,即使 umask 是
000,新建文件仍是666,不是777
避免常见误区
有些写法看似合理,但实际无效或不推荐:
- 不要用
umask=002—— 这是赋值语法错误,umask是命令,不是变量 - 不用
export umask=002—— umask 不是环境变量,不能通过 export 传递 - 不必加
sudo—— 普通用户可自由设置自己的 umask,无需特权 - 脚本退出后自动恢复原值,无需手动还原
完整小示例
以下是一个带 umask 设置的实用脚本片段:
#!/bin/bash umask 002 mkdir -p /tmp/myproject touch /tmp/myproject/config.txt chmod 600 /tmp/myproject/config.txt # 如需额外控制,可再用 chmod
这样就能确保项目目录对同组用户可写,同时保持配置文件私密性。


















