通过umask值计算linux系统文件权限的多种方法分享

本文发布时间: 2019-Mar-21
特别说明下:这个计算法简单好记,但是由于大部分网友都直接用减法(不考虑方法的特殊性而被批判)或被鸟哥私房菜误导甚至不相信这个方法了(甚至有学生也是)。其实,学习就是一个记忆的思路而已,没有对错就是多实践,然后,总结一个小技巧,有利于自己学习记忆就够了。最后老男孩想说的是学习总结结论不是做科学,所以,有伪科学的小结论很正常,例如:配置的标准是什么,优化的标准是什么,装系统选择包的标准,分区的标准 都是没正确答案的,但是这不影响 学好linux运维,这是老男孩想和大家说的。文件权限计算小结论:创建文件默认最大权限666 (-rw-rw-rw-),默认创建的文件没有可执行x权限位。对于文件来说,umask的设置是在假定文件拥有八进制666权限上进行,文件的权限就是666减去umask的掩码数值;重点在这里,如果umask的某些位为奇数,那么,在对应为奇数的权限位加1就是需要的文件权限。创建目录默认最大权限777 (默认创建的目录属主是有x权限,允许用户进入) 对于目录来说,umask的设置是在假定文件拥有八进制777权限上进行,目录八进制权限777减去umask的掩码数值;文件权限的一般计算方法:默认文件权限计算方法1)假设umask值为:0226 6 6 ==>文件的起始权限值0 2 2 - ==>umask的值---------6 4 42)假设umask值为:0456 6 6 ==>文件的起始权限值0 4 5 - ==>umask的值---------6 2 1 ==>计算出来的权限。由于umask的最后一位数字是5,所以,其他用户组位再加1。0 0 1 +---------622 ==>真实文件权限默认目录权限计算方法7 7 7 ==>目录的起始权限值0 2 2 - ==>umask的值---------7 5 5实例一:umask为偶数时,读者应该不会有疑问[root@oldboy oldboy]# umask0022 #→umask当前数值[root@oldboy oldboy]# umask 044 #→更改为044[root@oldboy oldboy]# umask0044[root@oldboy oldboy]# mkdir umask_test #→建目录测试[root@oldboy oldboy]# ls -ld umask_testdrwx-wx-wx 2 root root 4096 Nov 12 19:21 umask_test #→对应数字权限为733,是不是服务上面的计算方法?[root@oldboy oldboy]# touch umask_test.txt[root@oldboy oldboy]# ls -l umask_test.txt-rw--w--w- 1 root root 0 Nov 12 19:21 umask_test.txt #→对应数字权限为622,是不是服务上面的计算方法?实例二:umask值的部分位为奇数时,这个是读者疑问最大的其他属组位为奇数时[root@oldboy oldboy]# umask 0023[root@oldboy oldboy]# mkdir dir[root@oldboy oldboy]# touch file[root@oldboy oldboy]# ls -l总计 4drwxr-xr-- 2 root root 4096 11-15 01:04 dir #→对应数字权限为754-rw-r--r-- 1 root root 0 11-15 01:04 file#→对应数字权限为644提示:根据前面的计算方法,当umask为0023时,dir的权限应该是754,而file的权限应该为643,但是由于umask的其他组位为奇数,因此最终权限为其他组位加1,即643加001(对应实践结果644)。注意:umask为偶数的位不要加1。实例三:umask值的所有位为奇数时[root@oldboy oldboy]# umask 0551[root@oldboy oldboy]# umask0551umask 为0551 根据掩码方法计算:目录权限为226,文件权限115,而实际文件权限为226(umask的三个权限位都是奇数,所以,每个位分别加1就是正确的权限)[root@oldboy oldboy]# mkdir dir5[root@oldboy oldboy]# touch file5[root@oldboy oldboy]# ls -l总计 4d-w--w-rw- 2 root root 4096 11-15 01:27 dir5 #→目录对应数字权限为226--w--w-rw- 1 root root 0 11-15 01:27 file5#→目录对应数字权限为226再来一例验证下:[root@oldboy oldboy]# umask 0333[root@oldboy oldboy]# umask0333 umask 为0333 根据掩码方法计算:目录权限为444,文件权限333,而实际文件权限为444(umask的三个位都是奇数,所以,每个位分别加1就是正确的权限)[root@oldboy oldboy]# mkdir dir3[root@oldboy oldboy]# touch file3[root@oldboy oldboy]# ls -l|grep 3dr--r--r-- 2 root root 4096 11-15 01:30 dir3#→目录对应数字权限为444-r--r--r-- 1 root root 0 11-15 01:30 file3#→目录对应数字权限为4442)通过8进制字母计算(此法也可以选择)拿上面的实例3验证。[root@oldboy oldboy]# umask 551umask值为551,对应的权限为-r-xr-x--x,即所有的文件和目录都取消权限中的-r-xr-x--x权限。文件权限:【-rw-rw-rw-】-【-r-xr-x--x】=【--w--w--rw-】=226(文件的x位上没有x,就不用取消了)目录权限:【-rwxrwxrwx】-【-r-xr-x--x】=【--w--w--rw-】=226(目录的x位上有x,直接取消即可)继续验证:[root@oldboy oldboy]# umask 333umask值为333,对应的权限为-wx-wx-wx,即所有的文件和目录都取消权限中的-wx-wx-wx权限。文件权限:【-rw-rw-rw-】-【-wx-wx-wx】=【-r--r--r--】=444(文件的x位上没有x,就不用取消了)目录权限:【-rwxrwxrwx】-【-wx-wx-wx】=【-r--r--r--】=444(目录的x位上有x,直接取消即可)3)通过二进制方法计算(不好记忆不推荐)通过进制之间转换,八进制转成二进制来计算。[root@oldboy oldboy]# umask00220 2 2---------- 八进制转换二进制0 10 10说明:把umask值八进制转换成二进制6 6 6------------ 八进制转换二进制110 110 110说明:把文件默认最大权限值八进制转换成二进制 0 10 10 umask二进制------------- 与运算110 110 110 文件最大权限二进制-------------000 010 010------------- 转换八进制 0 2 2说明:最后得到的值是022,然后使用666减去022,那么文件的创建权限就是644[root@oldboy oldboy]# umask 551[root@oldboy oldboy]# umask05515 5 1------------- 转换二进制101 101 001 umask二进制------------- 与运算110 110 110 文件最大权限二进制-------------100 100 000------------- 转换八进制4 4 0说明:最后得到的值是440,然后使用666减去440,那么文件的创建权限就是226。后记:特别欢迎大家给本文提建议,共同创造一个更好好的学习linux的生态环境。本文出自 “老男孩的linux博客” 博客


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:08pm
栏目列表