umask是用来控制创建文件模式的命令,它为创建文件定义初始化的权限位,uamsk遵循POSIX的标准,因为它会影响当前shell的执行环境,通常内置到shell中

查看当前umask值

➜  umask 
000

计算umask值

当创建新文件时,通常都会有默认的权限位,这是因为系统会根据我们设置umask值来为新文件设置权限,有时我们需要更改此值,需要重新计算umask的值,假设我们系统的umask值是027

0  第一位即user的所有权   7-0    7 
2  第二位即group的所有权  7-2    5
7  第三位即other的所有权  7-7    0
十进制	二进制	       含义
0	    000	      没有权限
1	    001	      只执行
2	    010	      只写
3	    011	      写,执行
4	    100	      只读
5	    101	      读,执行
6	    110	      读,写
7	    111	      读写,执行

从表中可以看到创建新文件时默认设置的权限是用最高权限(777)减去umak值(027)即750,对应到第二个表就是user为读写,执行,group为读,执行,other则没有权限,但在Linux中不允许创建有可执行权限的新文件,因此需要去掉user,group,other执行权限1,因此在这个示例中默认的新文件权限为640,而目录则没有限制,新创建的文件权限最高是666,目录可以是777

另一种计算方式

比如umask=022;文件默认最高权限为666,则文件的初始权限就为:rw-rw-rw- 减去 ----w--w- 得到 rw-r--r-- 的文件初始权限,umask值代表着,被 “抛弃” 的权限

Thank SmartA

设置umask值

➜ umask 0000 #十进制的方式
➜ touch test
➜ stat -c %a  test
666

命令的方式仅在当前会话有效,可以在配置文件设置永久生效~/.bashrc,/etc/bashrc
Ubuntu

vim /etc/login.defs

Thank ArchLinux