(转)深入浅出linux系统umask值及其对应的文件权限讲解
浅出linux系统umask值及其对应的文件权限讲解
原文:http://blog.51cto.com/oldboy/1060032
缘起:
1、此文的撰写特别为感谢51cto的博客工作人员和领导,老男孩博客很荣幸的成为了专家博客,老男孩责任更重了,争取以后加油为大家分享文章。
2、老男孩本人驾驶考试今天正好拿到本(历时2个月,完全靠实力通过,补考一次)。
3、有一些网友和学生总纠结这个umask问题,到处搜索也找不到好的说明文章。
另:本文最值得博友思考的地方不是内容,而是勤于思考并较周全的努力实践的学习心态,然后能够自我下一个比较准确结论的学习记忆的思路,打个比方吧,金庸的小说大家很难记,那么把它搞成对联后就没人能忘记掉了了。在学习linux运维方向同样如此,我们应该多模拟设定一些试验场景去验证测试,最后总结一个自己能牢记住的小结论,这才是学习linux的最佳途径。
本文省略了对linux文件权限和umask基本知识的介绍,有需要的了解的博友可以参看其他资料。
1)简单好用的加减法计算(老男孩推荐)
特别说明:第一种计算法简单、易用、好记,但是由于大部分网友都直接用减法(不考虑此方法的特殊性而被批判)或被某些书籍误导甚至不相信不敢用这个方法了。其实,学习就是一个记忆的思路而已,没有对错,就是多思考多实践,然后,总结一个小技巧结论,有利于自己学习记忆就够了。
最后,老男孩想说的是学习总结结论不是做科学,所以,未必就需要那么严谨,有伪科学的小结论很正常(但追求严谨的心态必须要有),例如:nginx服务配置的标准是什么,mysql优化的标准是什么,装linux系统选择安装包的标准是什么,给系统分区的标准是什么,其实,这些都是没标准答案的,但是这不影响我们学好linux运维,这就是老男孩传导给大家的思维。
文件权限计算小结论:
创建文件默认最大权限为666 (-rw-rw-rw-),默认创建的文件没有可执行权限x位。
对于文件来说,umask的设置是在假定文件拥有八进制666的权限上进行的,文件的权限就是666减去umask(umask的各个位数字也不能大于6,如,077就不符合条件)的掩码数值;重点在接下来的内容,如果umask的部分位或全部位为奇数,那么,在对应为奇数的文件权限位计算结果分别再加1就是最终文件权限值。
创建目录默认最大权限777(-rwx-rwx-rwx),默认创建的目录属主是有x权限,允许用户进入。
对于目录来说,umask的设置是在假定文件拥有八进制777权限上进行,目录八进制权限777减去umask的掩码数值。
文件权限的一般计算方法:
默认文件权限计算方法
1)假设umask值为:022(所有位为偶数)
6 6 6 ==>文件的起始权限值
0 2 2 - ==>umask的值
---------
6 4 4
2)假设umask值为:045(其他用户组位为奇数)
6 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]# umask
0022 #→umask当前数值
[root@oldboy oldboy]# umask 044 #→更改为044
[root@oldboy oldboy]# umask
0044
[root@oldboy oldboy]# mkdir umask_test #→建目录测试
[root@oldboy oldboy]# ls -ld umask_test
drwx-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值的部分或全部位为奇数时,这个是读者疑问最大的
当umask值的其他属组位为奇数时
[root@oldboy oldboy]# umask 0023
[root@oldboy oldboy]# mkdir dir
[root@oldboy oldboy]# touch file
[root@oldboy oldboy]# ls -l
总计 4
drwxr-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]# umask
0551
umask 为0551 根据掩码方法计算:目录权限为226,文件权限115,而实际文件权限为226(umask的三个权限位都是奇数,所以,每个位分别加1就是正确的权限)
[root@oldboy oldboy]# mkdir dir5
[root@oldboy oldboy]# touch file5
[root@oldboy oldboy]# ls -l
总计 4
d-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]# umask
0333
umask 为0333 根据掩码方法计算:目录权限为444,文件权限333,而实际文件权限为444(umask的三个位都是奇数,所以,每个位分别加1就是正确的权限)
[root@oldboy oldboy]# mkdir dir3
[root@oldboy oldboy]# touch file3
[root@oldboy oldboy]# ls -l|grep 3
dr--r--r-- 2 root root 4096 11-15 01:30 dir3 #→目录对应数字权限为444
-r--r--r-- 1 root root 0 11-15 01:30 file3 #→目录对应数字权限为444
2)通过8进制字母符号计算(记忆此法也可)
拿上面的实例3验证。
[root@oldboy oldboy]# umask 551
umask值为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 333
umask值为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)通过二进制方法计算(不好记忆不推荐)
通过进制之间转换,八进制转成二进制来计算。
0022
0 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]# umask
0551
5 5 1
------------- #→转换二进制
101 101 001 #→umask二进制
------------- #→与运算
110 110 110 #→文件最大权限二进制
-------------
100 100 000
------------- #→转换八进制
4 4 0
说明:最后得到的值是440,然后使用666减去440,那么文件的创建权限就是226。
后记:特别欢迎大家给本文提建议,共同创造一个更好好的学习linux的生态环境。
(转)深入浅出linux系统umask值及其对应的文件权限讲解的更多相关文章
- 在Linux系统中使用Vim读写远程文件
大家好,我是良许. 今天我们讨论一个 Vim 使用技巧--用 Vim 读写远程文件.要实现这个目的,我们需要使用到一个叫 netrw.vim 的插件.从 Vim 7.x 开始,netrw.vim 就被 ...
- Linux运维四:文件属性及文件权限
一:文件属性 我们使用ls -lhi命令来查看文件时,会列出一堆的文件属性,如: [root@Gin day7]# ll -hi total 7.8M 260674 -rw-r--r-- 1 root ...
- linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)
linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制) 发表于2012//07由feng linux 本身的ugo rwx的权限,对于精确的权限控制很是力不从心的,ac ...
- [转]正确配置Linux系统ulimit值的方法
在Linux下面部署应用的时候,有时候会遇上Socket/File: Can't open so many files的问题:这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且L ...
- 正确配置Linux系统ulimit值的方法【转】
转自:http://www.cnblogs.com/ibook360/archive/2012/05/11/2495405.html 在Linux下面部署应用的时候,有时候会遇上Socket/File ...
- 正确配置Linux系统ulimit值的方法
在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题:这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且L ...
- Linux系统之用户、群组和权限
一.用户管理 创建用户时,系统为用户分配一个唯一的编号UID,同时为用户创建一个同名的组,并为组分配一个编号GID,并把该用户加入该组中. 系统规定: uid: 0 特权用户 u ...
- ***Linux系统下如何查看及修改文件读写权限
查看文件权限的语句: 在终端输入:ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些:-rw-rw-r-- 一共有10位数 其中: 最前面那个 - 代表的是 ...
- [转]Linux系统下如何查看及修改文件读写权限
转自 :http://www.cnblogs.com/CgenJ/archive/2011/07/28/2119454.html 查看文件权限的语句: 在终端输入:ls -l xxx.xxx (xxx ...
随机推荐
- selenium webdriver frame操作,跳进跳出
如果有两个平级的frame,跳进一个以后操作完成再操作第二个,这种情况要先跳出来,再跳进另外一个frame 跳出语句:browser.switch_to_default_content() #codi ...
- spring容器扩展功能之一:spring加载ApplicationContext.xml的四种方式
容器加载Bean的常见两个类ApplicationContext和BeanFactory, 一.首先,看看spring中加载配置在xml中的Bean对象到容器 spring 中加载xml配置文件的方式 ...
- mariadb的读写分离
实验环境:CentOS7 设备:一台主数据库服务器,两台从数据库服务器,一台调度器 主从的数据库配置请查阅:http://www.cnblogs.com/wzhuo/p/7171757.html : ...
- JAVA基础知识总结3(面向对象)
特点:过程其实就是函数:对象是将函数等一些内容进行了封装 1:将复杂的事情简单化. 2:面向对象将以前的过程中的执行者,变成了指挥者. 3:面向对象这种思想是符合现在人们思考习惯的一种思想. 匿名对象 ...
- ANDROID开发中资源文件和资源ID是如何映射的
http://tweetyf.org/2013/02/mapping_between_res_resid_android.html
- 关于ArcGis for javascrept之Map类
ArcGis for javascrept_ESRI_Map类: 1. 构造方法:esri.Map(); 参数: extent 如果设置了该选项,一旦这个选项的投影被设置,那么所有的图层都在定义的投 ...
- unreal3对象管理模块分析
凡是稍微大一点的引擎框架,必然都要自己搞一套对象管理机制,如mfc.qt.glib等等,unreal自然也不例外. 究其原因,还是c++这种静态语言天生的不足,缺乏运行时类型操作功能,对于复杂庞大的逻 ...
- Blast 如何使用Blast+(Linux)转载
下载数据 #此处下载对应物种的数据库ftp://ftp.ncbi.nih.gov/genomes/,下载fna格式的即可 wget ftp://ftp.ncbi.nih.gov/genomes/A ...
- neon eclipse tomcat发布项目乱码
解决方法如图
- 20169219linux 内核原理与分析第四周作业
系统调用 系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核唯一的合法入口. 一般情况下,应用程序通过在用户空间实现的应用编程接口(API)而不是直接通过系统调用来编程. 要访问系统调用 ...