1. 理解umask的本质
在Linux系统中,每个新建的文件和目录都会有一个默认的权限设置。这个默认权限并非随意指定,而是通过一个称为umask(用户文件创建掩码)的机制来控制的。umask实际上是一个权限过滤器,它决定了新建文件或目录的最终权限。
注意:umask值不是权限本身,而是要从完整权限中"减去"的部分。这是很多初学者容易混淆的概念。
1.1 umask的工作原理
umask使用八进制表示法,由3位数字组成,分别对应:
- 第一位:特殊权限位(通常为0)
- 第二位:用户权限位
- 第三位:组权限位
- 第四位:其他用户权限位
系统默认的完整权限是:
- 目录:777(rwxrwxrwx)
- 文件:666(rw-rw-rw-)
umask通过按位与运算来过滤这些默认权限。例如,常见的umask值为022,其计算过程如下:
对于目录:
code复制初始权限: 1 1 1 1 1 1 1 1 1 (777)
umask值: 0 0 0 0 1 0 1 0 (022)
结果权限: 1 1 1 1 0 1 0 1 (755)
对于文件:
code复制初始权限: 1 1 0 1 1 0 1 1 0 (666)
umask值: 0 0 0 0 1 0 1 0 (022)
结果权限: 1 1 0 1 0 0 1 0 0 (644)
1.2 查看当前umask值
在终端中直接输入umask命令即可查看当前值:
bash复制$ umask
0022
如果要查看符号表示形式:
bash复制$ umask -S
u=rwx,g=rx,o=rx
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. umask的配置与管理
2.1 临时修改umask值
要临时修改当前会话的umask值,只需直接使用umask命令:
bash复制$ umask 027
这个设置仅在当前shell会话中有效,退出后就会恢复默认值。
2.2 永久修改umask值
要使umask设置永久生效,需要修改shell的配置文件:
对于bash用户:
bash复制# 编辑~/.bashrc文件
echo "umask 027" >> ~/.bashrc
source ~/.bashrc
对于zsh用户:
bash复制# 编辑~/.zshrc文件
echo "umask 027" >> ~/.zshrc
source ~/.zshrc
对于系统全局设置(影响所有用户):
bash复制# 编辑/etc/profile文件
sudo nano /etc/profile
# 添加或修改umask设置
2.3 不同场景下的推荐umask值
- 个人开发环境:002(文件664,目录775)
- 多用户共享环境:027(文件640,目录750)
