前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天学点Linux命令之umask

每天学点Linux命令之umask

作者头像
Bug开发工程师
发布2018-09-21 09:52:31
8100
发布2018-09-21 09:52:31
举报

前言

在进入今天的主题之前,我们先来回顾一下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值设置文件或目录的默认权限了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农沉思录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档