详解linux下umask的使用
最近开始学习linux,看完马哥的linux课程关于umask的这个部分,写这篇博客希望加深下我对umask的理解和对umask不太清楚的博友一些帮助。
1umask是什么
当我们登录系统之后创建一个文件是会有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask用于设置用户创建文件或者目录的默认权限,umask设置的是权限的“补码”,而我们常用chmod设置的是文件权限码。一般在/etc/profile,HOME/.bashprofile或者HOME/.profile中设置umask值。
2umask是用来做什么的
默认情况下的umask值是022(可以用umask命令查看),此时你建立的文件默认权限是644(6-0,6-2,6-2),建立的目录的默认权限是755(7-0,7-2,7-2),可以用ls-l验证一下,现在应该知道umask的用途了吧,它是为了控制默认权限的。
[root@bogontest]#id uid=0(root)gid=0(root)groups=0(root)context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@bogontest]#umask 0022 [root@bogontest]#toucha.txt [root@bogontest]#ls-l total0 -rw-r--r--.1rootroot0Jul300:40a.txt [root@bogontest]#mkdirb [root@bogontest]#ls-l total0 -rw-r--r--.1rootroot0Jul300:40a.txt drwxr-xr-x.2rootroot6Jul300:41b
从上面可以看到,root的umask是022(第一个0代表特殊权限位,这里先不考虑),创建的文件默认权限是644,创建的目录是755。
3基本权限讲解
讲解umask的使用之前,需要先讲解下文件的基本权限
linux文件权限
r
w
x
文件
可以查看文件内容
可以修改文件
可以把文件启动为一个运行的程序
目录
可以ls查看目录中的文件名
可以在目录中创建或者删除文件(只有w权限没法创建,需要x配合)
可以使用cd 进入这个目录ls-l显示目录内文件的元数据的信息
4umask计算权限
对于文件和目录来说,最大的权限其实都是777,但是执行权限对于文件来说,很可怕,而对目录来说执行权限是个基本权限。所以默认目录的最大权限是777,而文件的默认最大权限就是666。
对于root用户的umask=022这个来说,777权限二进制码就是(111)(111)(111),022权限二进制码为(000)(010)(010)。
- 所有权限二进制的1:代表有这个权限
- umask二进制1:代表要去掉这个权限,不管你原来有没有权限,你最终一定没有这个权限。
- umask二进制的0:代表我不关心对应位的权限,你原来有权限就有权限,没有就没有,我不影响你。
umask为002的文件默认权限计算方法
所有者r
所有者w
所有者x
所在组r
所在组w
所在组x
其他r
其他w
其他x
所有权限777
1
1
1
1
1
1
1
1
1
umask掩码002
0
0
0
0
1
0
0
1
0
计算后的值
1
1
1
1
0
1
1
0
1
umask为002的目录默认权限计算方法
所有者r
所有者w
所有者x
所在组r
所在组w
所在组x
其他r
其他w
其他x
所有权限666
1
1
0
1
1
0
1
1
0
umask掩码002
0
0
0
0
1
0
0
1
0
计算后的值
1
1
0
1
0
0
1
0
0
umask为023的目录默认权限计算方法
所有者r
所有者w
所有者x
所在组r
所在组w
所在组x
其他r
其他w
其他x
所有权限777
1
1
1
1
1
1
1
1
1
umask掩码023
0
0
0
0
1
0
0
1
1
计算后的值
1
1
1
1
0
1
1
0
0
umask为023的文件默认权限计算方法
所有者r
所有者w
所有者x
所在组r
所在组w
所在组x
其他r
其他w
其他x
所有权限666
1
1
0
1
1
0
1
1
0
umask掩码023
0
0
0
0
1
0
0
1
1
计算后的值
1
1
0
1
0
0
1
0
0
上面就是一个umask的正常计算过程,但是这样实在是太麻烦了。我们使用如下的简单的方法快速计算。
- 对于目录,直接使用777-umask即可,就得到了最终结果。
- 对于文件,先使用666-umask。
- 如果对应位上为偶数:最终权限就是这个偶数值。
- 如果上面的对应为上有奇数,就对应位+1。
上面的这个方法计算是非常方便的,为何得到奇数要+1呢。
文件的最大权限是666,都是偶数,你得到奇数,说明你的umask有奇数啊,读为4,写为2,都是偶数,说明你有执行权限的。
就按照上面的umask=023为例,在计算其他用户权限的时候6-3=3,6是读写,3是写和执行,其实应该是读写权限减去读权限的得到写权限的,相当于我们多减去了一个执行权限。所以结果加1。
5umask的修改
umask的修改分2中,临时修改的和永久修改的
临时修改:
[root@bogontest]#umask023 [root@bogontest]#umask 0023 [root@bogontest]#
永久修改:
可以编辑以下文件添加umask=022。
交互式登陆的配置生效:
/etc/profile
非交互登陆的配置生效:
~/.bashrc
6常用umask
[root@bogontest]#umask002 [root@bogontest]#umask 0002 [root@bogontest]#umask022 [root@bogontest]#umask 0022
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。