umask是Linux中设置新文件和目录默认权限掩码的命令,其值为八进制数,目录权限=777−umask,文件权限=666−umask(且文件默认无执行位)。

直接运行 umask 命令就能看到当前值
在终端里敲 umask,回车,输出就是当前 shell 会话生效的掩码,比如 0022 或 0002。这个值是八进制,前导零不能忽略——022 和 0022 等价,但有些 shell(如 zsh)可能省略首位零,统一按四位八进制理解最稳妥。
umask -S 能看出权限位的实际含义
数字形式不够直观,加 -S 参数可转成符号表示,例如:
umask -S u=rwx,g=rx,o=rx
这说明:用户(u)保留全部权限,组(g)和其他人(o)都缺写(w)权限——对应数字掩码就是 0022。注意:umask -S 显示的是“新建目录”的默认权限基线,不是文件;文件默认无 x,所以实际文件权限要额外减去执行位。
别被 umask 输出骗了:它不等于最终文件权限
umask 本身只是个“减法掩码”,真正权限得靠计算:
- 新建目录:用
777减去 umask 值(如777 - 0022 = 755) - 新建文件:用
666减去 umask 值(如666 - 0022 = 644),且文件默认不带 x,所以即使 umask 是0000,新文件也不会有执行权限
常见误区是看到 umask 0022 就以为“所有新建东西都是 644”,其实目录是 755,且 scp、rsync 等工具不继承本地 umask,它们依赖远端 sshd 的配置或 PAM 设置。
配置文件里的 umask 可能和终端里看到的不一样
你当前终端显示的 umask,只反映这次会话的最终结果,它可能是由多个地方叠加设置的:
- 登录 shell 读
/etc/profile、/etc/bash.bashrc、~/.bash_profile - 非登录 shell(比如你开个新终端标签页)通常只读
~/.bashrc - 脚本里执行
umask 0002不会影响父 shell,仅对后续子进程有效
想确认系统级默认值,得去翻这些文件里有没有 umask 行;想改永久设置,优先加到 ~/.bashrc 末尾再 source ~/.bashrc,别只信终端里 umask 的输出。


















