平时在 Linux 上新建文件、新建文件夹,发现它们自动就有了权限,比如文件一般是 644、目录是 755,很多人以为是系统固定死的,其实不是 —— 这一切都是由 umask 控制的。
今天就用很好理解的方式,把 umask 到底是干嘛的、怎么看、怎么改、怎么算权限,一次性讲明白,日常运维、服务器配置、写脚本都用得上。
先说最直观的:umask 是一个 “遮罩值”,作用就是减去默认权限,而不是直接设置权限。
系统有两个基准权限:
- 新建文件:默认最大权限是 666(rw-rw-rw-)
- 新建目录:默认最大权限是 777(rwxrwxrwx)
umask 就是从这两个值里 “扣掉” 对应的权限,最终得到你新建文件 / 目录的实际权限。
先看一下当前系统的 umask 是多少,直接输命令就行:
umask
普通用户一般输出 0002,root 用户通常是 0022。
前面那个 0 是特殊权限位,日常不用管,我们只看后面三位 022 就够了。
举个最常用的例子:
umask 是 022
- 文件最终权限:666 – 022 = 644
- 目录最终权限:777 – 022 = 755
这就是为什么我们新建文件默认是 rw-r--r--,目录是 rwxr-xr-x。
如果你是普通用户,umask 一般是 002:
- 文件:666 – 002 = 664
- 目录:777 – 002 = 775 同组用户就可以一起读写,适合团队共用目录。
临时修改 umask(当前终端生效)
想临时改一下,让新建文件权限更严格或更宽松,直接赋值就行:
# 更严格,同组无写权限
umask 022
# 更宽松,团队共享用
umask 002
# 非常严格,仅自己可用
umask 077
077 扣完之后:
- 文件:600(只有自己能读写)
- 目录:700(只有自己能进)
很适合放私密配置、密钥之类的文件。
永久修改 umask(重启 / 重登依然有效)
临时改了只对当前窗口有用,想永久生效就要改配置文件。
对当前用户生效,写入自己的环境配置:
vim ~/.bashrc
# 或者
vim ~/.profile
在最后加一行:
umask 022
让它立即生效:
source ~/.bashrc
如果想对所有用户生效,可以改系统级配置:
sudo vim /etc/profile
同样在末尾添加 umask 设置即可。
快速判断权限对不对
你不用每次都心算,可以用这个命令直接看结果:
umask -S
它会直接以 rwx 形式显示最终权限,一目了然。
简单总结一下:
umask 就是 Linux 给新建文件 / 目录的 “默认权限减法器”。
- 想安全 → umask 022 / 077
- 想共享 → umask 002
- 想临时生效 → 直接执行 umask xxx
- 想永久生效 → 写进 .bashrc 或 /etc/profile
日常用记住这几个常用值,基本就能搞定所有权限默认分配的场景,再也不会新建出权限太松或太严的文件了。