1. 理解Linux中的umask机制
在Linux系统中,每个新创建的文件和目录都会自动获得一组默认权限。这些权限决定了谁可以读取、写入或执行该文件/目录。umask(用户文件创建掩码)就是控制这些默认权限的核心机制。
想象umask就像是一个过滤器:当系统要给新文件分配权限时,会先经过这个过滤器的处理。比如系统默认想给文件666权限(即rw-rw-rw-),但经过umask 022的过滤后,实际得到的权限是644(rw-r--r--)。
注意:虽然我们常说umask是做"减法",但实际上它是通过位运算(AND NOT)来实现权限屏蔽的。当计算结果出现负数时,系统会自动归零处理。
1.1 umask的数值表示
umask值通常用八进制表示,由4位数字组成(如0022)。这4位分别对应:
- 第1位:特殊权限位(setuid/setgid/sticky bit)
- 第2位:用户(owner)权限
- 第3位:组(group)权限
- 第4位:其他用户(others)权限
最常见的默认umask值是0022,这意味着:
- 用户权限不受影响(第2位为0)
- 组和其他用户的写权限被屏蔽(第3、4位为2)
查看当前umask值的方法:
bash复制umask
# 或者显示符号格式
umask -S
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. umask对文件和目录的不同影响
2.1 对普通文件的影响
系统给新文件的"初始权限"是666(rw-rw-rw-),但会经过umask的过滤:
bash复制初始权限: 666 (rw-rw-rw-)
umask值: 022 (----w--w-)
最终权限:644 (rw-r--r--)
实际计算过程(二进制位运算):
code复制 110 110 110 (666二进制)
&~ 000 010 010 (022二进制取反)
= 110 100 100 (644二进制)
重要细节:Linux系统创建普通文件时,会主动剥夺所有执行权限(x),这是为了防止意外执行潜在的危险脚本。如果需要执行权限,必须后续手动添加。
2.2 对目录的影响
目录的初始权限是777(rwxrwxrwx),因为目录必须要有执行权限(x)才能进入:
bash复制初始权限:
