在 Linux 系统中,umask(用户文件创建模式掩码)用于控制新创建的文件和目录的默认权限,它通过“屏蔽”掉某些权限位,来决定新文件/目录的最终权限。
什么是 umask?
- 文件默认权限:通常为
666(即-rw-rw-rw-),因为文件默认不应有执行权限。 - 目录默认权限:通常为
777(即drwxrwxrwx),因为目录需要可执行权限才能进入。 - umask 作用:从默认权限中“减去”(更准确说是“屏蔽”)umask 设置的权限。
注意:umask 是减法逻辑,但不是直接相减,而是按位“非”后与默认权限进行“与”操作。
查看当前 umask
umask
输出示例:
0022
这表示:
- 文件默认权限:
666 & ~022 = 644→-rw-r--r-- - 目录默认权限:
777 & ~022 = 755→drwxr-xr-x
临时设置 umask(仅当前 shell 会话有效)
umask 0022 # 设置 umask 为 0022 umask 0002 # 设置 umask 为 0002(常用于开发协作,组可写)
设置后,新开终端或重新登录会失效。
永久设置 umask
方法 1:修改用户级配置文件(推荐)
编辑当前用户的 shell 配置文件:
- 对于 Bash:
echo "umask 0022" >> ~/.bashrc
- 对于 Zsh:
echo "umask 0022" >> ~/.zshrc
然后重新加载配置:
source ~/.bashrc # 或 source ~/.zshrc
方法 2:修改系统级配置文件(影响所有用户)
编辑 /etc/profile 或 /etc/bash.bashrc(Debian/Ubuntu)或 /etc/profile.d/umask.sh:
sudo echo "umask 0022" > /etc/profile.d/umask.sh
注意:某些发行版使用
/etc/login.defs中的
UMASK 字段,但更推荐上述方法。
umask 数值含义
umask 是三位八进制数,分别代表:
| 位 | 含义 | 对应权限屏蔽 |
|---|---|---|
| 第1位 | 特殊权限(setuid/setgid/sticky) | 通常设为 0 |
| 第2位 | 所有者(user)权限屏蔽 | 4=读, 2=写, 1=执行 |
| 第3位 | 组(group)权限屏蔽 | 同上 |
| 第4位 | 其他(others)权限屏蔽 | 同上 |
常见 umask 值:
| umask | 文件权限 | 目录权限 | 适用场景 |
|---|---|---|---|
| 022 | 644 | 755 | 默认,安全,适合大多数用户 |
| 027 | 640 | 750 | 组不可访问,更严格 |
| 002 | 664 | 775 | 组可写,适合协作开发 |
| 007 | 660 | 770 | 仅所有者和组可访问 |
验证 umask 效果
# 设置 umask umask 0027 # 创建文件 touch testfile ls -l testfile # 输出: -rw-r----- 1 user group 0 ... # 创建目录 mkdir testdir ls -ld testdir # 输出: drwxr-x--- 2 user group 4096 ...
注意事项
- umask 不影响已有文件:只对新创建的文件/目录生效。
- 某些程序可能忽略 umask:如
sudo、cron、某些服务可能使用不同的 umask。 - 安全考虑:避免使用
000,否则文件权限过于开放,存在安全风险。 - 协作环境:开发团队常使用
002或0002,以便组成员可编辑同一文件。
- 查看:
umask - 临时设置:
umask 0022 - 永久设置:写入
~/.bashrc或/etc/profile.d/umask.sh - 常用值:
022(默认)、002(协作)、027(严格)
根据你的使用场景选择合适的 umask 值即可。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/479524.html



