umask

                                                umask

在linux操作系统上,文件系统预设的默认权限是666;而目录系统预设的默认权限是777,但这里的默认权限并不是生成文件或者目录时的权限,而是经过掩码(umask)遮挡掉某些不需要的默认权限最后生成用户所需的文件或者目录的最终权限;

使用umask命令查看当前用户创建文件时的默认掩码,可以得出普通用户的umask值是002,root用户的umask是022

如果是root用户创建一个普通文件,则默认权限是644,这个是如何得出的呢?

首先不是直接使用666-022,也不是通异或运算,而是‘遮挡’效果,后面介绍
 

文件系统预设的默认权限:   rw_ rw_ rw_    666

umask                  ___ _w_ _w_    022

最终文件默认权限          rw_ r__ r__    644

原理:umask对应位上的值就是文件系统预设的默认权限被’遮挡’的值group 和 other权限位上的w遮挡掉只剩下 r 权限

同理:可以得出root用户创建目录的默认权限是 :755

目录系统预设的默认权限:   rwx rwx rwx    777

umask                  ___ _w_ _w_    022

最终文件默认权限          rwx r_x r_x    755

普通用户创建文件的默认权限:664

文件系统预设的默认权限:   rw_ rw_ rw_    666

umask                  ___ ___ _w_    002

最终文件默认权限          rw_ rw_ r__    664

普通用户创建目录的默认权限:775

目录系统预设的默认权限:   rwx rwx rwx    777

umask                  ___ ___ _w_    002

最终文件默认权限          rwx rwx r_x    775

为什么说不是使用预设的系统默认权限减去umask的值呢?也不是异或运算呢?

例子:如果将umask改成033以root用户为例,如果只是单纯的相减结果是633,异或运算结果是655

使用’遮挡‘原理:结果是644

文件系统预设的默认权限:   rw_ rw_ rw_    666

umask                  ___ _wx _wx    033

最终文件默认权限          rw_ r__ r__    644

这里 group位和other位的权限需要‘遮挡’的权限是wx而x原来就是没有的,遮挡后就是 r 最终结果是644

这三个到底哪个正确呢?只需要使用root创建一个文件,再使用ls -l命令查看文件的权限就能发现,‘遮挡’原理是正确的,而不是单纯的相减,也不是异或运算,有的教程说的是先转换成字符再相减,这种说法也不严谨,就像这个例子rw_ 减去 _wx 等于多少呢??

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值