每天学点Linux命令之umask

>>强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!

每天学点Linux命令之umask

置顶本公众号,精彩文章不容错过。

前言

在进入今天的主题之前,我们先来回顾一下Linux文件权限的相关知识点。Linux里的文件权限可分为3组,分别是文件拥有者、同个群组的其他用户、不同群组的其他用户。每一组又有3种不同权限,分别是可读权限(r)、可写权限(w)、可执行权限(x)。可读权限用二进制表示的话是100,即十进制的4,可写权限用二进制表示的话是10,即十进制的2,可执行权限用二进制表示的话是1,也就是十进制的1。因此有时候我们也会用3个十进制数字来表示文件的权限,比如777表示的是文件拥有者、同个群组的其他用户和不同群组的其他用户都拥有可读、可写和可执行权限,因为7=4+2+1。要查看文件的权限可以用命令“ls -al”,接下来我们用root用户并新建一个文件file1,并看下它的权限。

新建文件file1:

root@study-machine:~/work# ls root@study-machine:~/work# touch file1 root@study-machine:~/work# ls file1

查看file1的权限:

root@study-machine:~/work# ls -al total 8 drwxr-xr-x 2 root root 4096 Apr 24 10:10 . drwx------ 7 root root 4096 Apr 24 10:05 .. -rw-r--r-- 1 root root    0 Apr 24 10:10 file1

可以看到,file1的文件拥有者具体可读可写(rw)权限,对于同个群组的其他用户和不同群组的其他用户都只具有可读(r)权限。如果我们继续新建其他的文件,通常情况下其默认的权限也跟file1一样,不信的话读者可以自己试一试。那么有没有办法指定新建文件时给文件分配其他默认的权限呢?这就需要用到我们今天要讲的命令——umask了。

umask是什么

umask可以指定当前用户在新建文件和目录时的默认权限。其是一个数值,可以直接用umask命令查看当前用户的umask值:

root@study-machine:~# umask 0022

可以看到,当前用户的umask值为0022,那么这个0022是什么意思呢?首先这里有4位数,第一位是特殊权限相关的,我们暂且不管,只要关注后面3位数就可以了。其次我们要说明的是在默认权限的设置上,文件和目录是不一样的。那么文件和目录的默认权限分别是怎样的呢?

默认情况下,我们新建一个文件是不需要具有可执行权限的,因此对于文件而言,其默认的最大权限就是666,表示对于文件拥有者、同个群组的其他用户和不同群组的其他用户都具有可读和可写权限。

对于目录而言,可执行权限与用户是否能进入该目录有关,因此默认情况下,目录的所有权限都对外开放,即默认的最大权限为777,表示对于文件拥有者、同个群组的用户和不同群组的其他用户都具有可读、可写和可执行权限。

这里要注意的是umask的值表示的是文件或目录的“默认最大值”需要减掉的权限。以上述umask值0022为例,由于文件的默认最大权限为666,第二位是0,表示的是不需要减掉任何权限,因此对于文件拥有者而言,而权限就是6;第三位为2,表示的是需要减掉可写权限,因此对于同个群组的其他用户而言,其权限就是4;第三位还是2,表示需要减掉可写权限,因此对于不同群组的其他用户而言,其权限就是4。故0022表示的是该用户新建的文件的默认权限是644。我们新建一个文件验证一下便知:

root@study-machine:~/work# ls root@study-machine:~/work# umask 0022 root@study-machine:~/work# touch file2 root@study-machine:~/work# ls -la total 8 drwxr-xr-x 2 root root 4096 Apr 25 21:10 . drwx------ 7 root root 4096 Apr 25 21:10 .. -rw-r--r-- 1 root root    0 Apr 25 21:10 file2

可以看到,当前的umask值是0022,我们新建的文件file2的默认权限是-rw-r--r--,即644,与上述分析的一致。

对于目录而言,则有些不同,我们还是以umask值0022为例进行分析。上文说了,目录的默认最大权限是777,第二位为0,表示的是不需要减掉任何权限,所以对于目录拥有者而言,其权限为7;第三位为2,表示的是需要减掉可写权限,因此对于同个群组的其他用户而言,其权限是可读可执行,即5;第四位为2,表示的是需要减掉可写权限,因此对于不同群组的其他用户而言,其权限是可读可执行,即5。故0022表示的是该用户新建一个目录的默认权限为755。我们新建一个目录验证一下便知:

root@study-machine:~/work# ls root@study-machine:~/work# umask 0022 root@study-machine:~/work# mkdir dir1 root@study-machine:~/work# ls -al total 12 drwxr-xr-x 3 root root 4096 Apr 25 21:46 . drwx------ 7 root root 4096 Apr 25 21:46 .. drwxr-xr-x 2 root root 4096 Apr 25 21:46 dir1

可以看到,目录dir1的权限为drwxr-xr-x,即755,与上述分析的一致。

使用umask

前面说了这么多,那么如何使用umask呢?很简单,只要在umask命令后面加上要设置的umask值就行了。比如我们要设置创建的文件的默认权限为664,即对于文件拥有者和同个群组的用户而言,不需要减掉任何权限,而对于不同群组的其他用户需要减掉可写权限,因此umask值为002。接下来我们设置umask值为002来验证一下:

root@study-machine:~/work# umask 002 root@study-machine:~/work# umask 0002 root@study-machine:~/work# touch file3 root@study-machine:~/work# ls -al total 8 drwxr-xr-x 2 root root 4096 Apr 25 21:28 . drwx------ 7 root root 4096 Apr 25 21:28 .. -rw-rw-r-- 1 root root    0 Apr 25 21:28 file3

可以看到,我们将umask值设置为002后,新建的文件file3的默认权限为-rw-rw-r--,即664,与一开始的默认权限明显不同,说明我们可以通过umask值设置文件或目录的默认权限了。


都看到这里了,不关注一下么


编程沉思录

一码不扫,何扫天下

每天学点Linux命令之umask
每天学点Linux命令之umask
推荐阅读
每天学点Linux命令之umask


每天学点Linux命令之umask