每天学点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值设置文件或目录的默认权限了。

原文发布于微信公众号 - Java架构沉思录(code-thinker)

原文发表时间:2018-09-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP技术大全

利用PHP扩展Taint找出网站的潜在安全漏洞实践

笔者从接触计算机后就对网络安全一直比较感兴趣,在做PHP开发后对WEB安全一直比较关注,2016时无意中发现Taint这个扩展,体验之后发现确实好用;不过当时在...

1502
来自专栏pangguoming

VMware中CentOS设置静态IP

因为之前搭建的MongoDB分片没有采用副本集,最近现网压力较大,所以准备研究一下,于是在自己电脑的虚拟机中搭建环境,但是发现之前VMware设置的是DHCP,...

1371
来自专栏影子

idea/eclipse下Maven工程集成web服务(tomcat、jetty)

3769
来自专栏Java编程技术

Dubbo剖析-集群容错

在进行系统设计时候,不仅要考虑正常逻辑该如何走,还要考虑异常逻辑。dubbo中当服务消费方调用服务提供方的服务出现错误时候,提供了多种容错方案,缺省为 fail...

1971
来自专栏Brian

Install Django Nginx uWSGI

概述 最近项目需要安装和配置多站点环境,所以把多站点开发环境配置和安装记录下来,帮助其他人少走坑。 安装Python 2.7.x 首先安装一些开发环境基本的包和...

3999
来自专栏数据派THU

收藏 | Linux常用156个命令汇总!

来源:机器学习算法与Python学习 本文为大家带来Linux系统中156个常用的命令。 linux命令是对Linux系统进行管理的命令。对于Linux系统来说...

51512
来自专栏影子

idea/eclipse下Maven工程集成web服务(tomcat、jetty)

1372
来自专栏一“技”之长

Git命令集十二——切换分支与还原文件 原

1151
来自专栏北京马哥教育

CentOS系统启动流程你懂否

一、Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序。 ...

3774
来自专栏玩转JavaEE

Spring Cloud Config服务端配置细节(一)

上篇文章我们看了Spring Cloud中分布式配置中心的一个基本使用,这里边还涉及到许多细节,本文我们就来看看服务端配置中的一些细节。 ---- 我们先通过下...

3635

扫码关注云+社区

领取腾讯云代金券