Linux新建文件默认644、目录默认755,源于umask掩码机制:文件默认上限666(无x位),目录默认上限777(必须含x),实际权限=默认权限&(~umask),如umask 022时,666&755=644、777&755=755。

Linux 新建文件或目录的权限不是随意定的,而是由 umask(默认权限掩码) 控制。它不直接赋予权限,而是“屏蔽”掉默认权限中你不希望开放的部分。
默认权限是怎么来的?
系统给新文件和目录设定了两个基础权限上限:
- 普通文件:最大允许权限是 666(即
-rw-rw-rw-),但内核强制禁止文件自动获得执行位(x),所以哪怕 umask 是 000,新建文件仍是 666,不是 777 - 目录:最大允许权限是 777(即
drwxrwxrwx),因为进入目录必须有执行位(x),所以目录可以且需要保留x
umask 真实怎么算?别只用“减法”
很多教程说“666 − umask = 文件权限”,这在数值上常碰巧对,但底层逻辑是位运算:
- 实际权限 = 默认权限 & (~umask)
- 比如 umask 0022:
~0022(八进制)→ 按位取反 → 得到掩码补码 0755
文件:0666 & 0755 = 0644
目录:0777 & 0755 = 0755
常见 umask 值与对应结果
不同用户身份默认值不同,直接影响新建项的安全性:
-
root 用户:通常 umask 022 → 文件 644(
-rw-r--r--),目录 755(drwxr-xr-x) -
普通用户:常见 umask 002 → 文件 664(
-rw-rw-r--),目录 775(drwxrwxr-x),组内可写 -
生产环境推荐:umask 027 → 文件 640(
-rw-r-----),目录 750(drwxr-x---),其他用户完全无权访问
怎么改?临时和永久都要注意这些
改完不生效?多半是没在正确上下文里操作:
-
临时修改:在当前终端运行
umask 007,仅对当前 shell 及其子进程有效;验证要立刻touch f && mkdir d && ls -l -
永久修改(当前用户):写入
~/.bashrc或更可靠的~/.bash_profile(登录 shell 优先读它);改完用source ~/.bash_profile立即生效,别只靠新开终端 -
全局修改:编辑
/etc/profile,所有用户生效,需 root 权限 -
注意 shell 类型:如果是 zsh,得改
~/.zshrc;用echo $SHELL确认当前 shell


















