Linux常用命令-umask

命令

umask

描述

Display or set file mode mask
显示或或设置文件掩码

用法

1
umask [-p] [-S] [mode]

选项

-S 以符号格式显示默认目录权限
mode为3位八进制数,取值范围000-777

注意

默认文件和目录的权限由umask值控制,默认文件权限为666-umask值,默认目录权限为777-umask值
默认umask配置在/etc/profile和/etc/bashrc中,但不建议修改默认值
普通用户默认umask值为002,则新建文件权限为666-002=664,即-rw-rw-r–,新建目录权限为777-002=775,即drwxrwxr-x
root用户默认umask值为022,则新建文件权限为666-022=644,即-rw-r–r–,新建目录权限为777-022=755,即drwxr-xr-x

如果更改了当前shell环境的umask值,则后续新建的文件或目录权限均会改变,所以推荐使用子shell的方式临时更改掩码,不影响当前shell环境

umask值并非简单的加减,而是使用二进制的异或运算得出的默认权限,过程如下

1
2
3
4
5
6
7
8
9
000 000 010 -> 002,umask值

110 110 110 文件权限默认值666,与umask值进行^异或运算,即相同为0,不同为1
000 000 010
110 110 100 -> 664,即为默认的文件权限

111 111 111 目录权限默认值777,与umask值进行^异或运算
000 000 010
111 111 101 -> 775,即为默认的目录权限

常用umask值

umask值 文件权限 目录权限
002 664 775
022 644 755
027 640 750
007 660 770

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 默认显示数字格式,首位的0表示特殊权限位,不能更改
$ umask
0022
# -S以符号格式显示,注意显示的是默认目录的权限755
$ umask -S
u=rwx,g=rx,o=rx
# 创建文件和目录
$ touch filea
$ mkdir dira
$ ls -al
drwxr-xr-x 2 root root 6 Dec 22 16:05 dira/
-rw-r--r-- 1 root root 0 Dec 22 16:05 filea
# 临时更改默认权限,即文件权限变为444,目录权限变为555
$ umask 222
$ touch fileb
$ mkdir dirb
$ ls -al
drwxr-xr-x 2 root root 6 Dec 22 16:05 dira/
dr-xr-xr-x 2 root root 6 Dec 22 16:06 dirb/
-rw-r--r-- 1 root root 0 Dec 22 16:05 filea
-r--r--r-- 1 root root 0 Dec 22 16:06 fileb
# 通过子shell更改默认权限,不影响当前shell环境
$ (umask 000;touch filec;mkdir dirc)
$ ll
drwxr-xr-x 2 root root 6 Dec 22 16:05 dira/
dr-xr-xr-x 2 root root 15 Dec 22 16:06 dirb/
drwxrwxrwx 2 root root 6 Dec 22 16:07 dirc/
-rw-r--r-- 1 root root 0 Dec 22 16:05 filea
-r--r--r-- 1 root root 0 Dec 22 16:06 fileb
-rw-rw-rw- 1 root root 0 Dec 22 16:07 filec

# 使用root用户创建一个同组用户有写权限的目录,需要在子进程()中临时更改umask值为002,普通用户默认umask值就是002直接创建目录即可
# umask看到的0022有四位数字,第一位表示特殊权限,暂时忽略
$ umask
0022
$ mkdir dir1
$ (umask 002;mkdir dir2)
# 如下dir1目录权限为755,dir2目录权限为775
$ ll -d dir*
drwxr-xr-x 2 root root 6 Feb 23 16:41 dir1/
drwxrwxr-x 2 root root 6 Feb 23 16:42 dir2/
# 当前也可以手动更改dir1的权限为775
$ chmod 775 dir1
$ ll -d dir*
drwxrwxr-x 2 root root 6 Feb 23 16:41 dir1/
drwxrwxr-x 2 root root 6 Feb 23 16:42 dir2/
# 更改用户组为ftp组
$ chown :ftp dir1 dir2
$ ll -d dir*
drwxrwxr-x 2 root ftp 6 Feb 23 16:41 dir1/
drwxrwxr-x 2 root ftp 6 Feb 23 16:42 dir2/