如何计算获得指定Linux/Unix新文件权限所需的umask值?
如何反向计算Linux/Unix中获取目标文件权限所需的umask
首先明确正向权限计算的核心规则:
新创建文件的最终权限 = 默认文件权限(通常为
0666) & (~umask)
注:这里的~是按位取反操作,仅针对八进制权限的低9位(对应所有者、组、其他用户的三位权限位)。
反向计算umask的公式
不需要依赖对照表,直接通过布尔代数推导即可得到精准计算公式:umask = 0666 & (~目标权限) & 0777
0666是文件的默认基础权限(默认无执行权限)~目标权限是对目标权限进行按位取反& 0777用于屏蔽按位取反后产生的高位无效1,确保结果是合法的三位八进制umask值(范围000到0777)
由于0666 & 0777结果就是0666,公式可简化为:umask = 0666 & (~目标权限)
实际计算示例
用几个常见目标权限验证公式有效性:
- 目标权限
644- 对
644按位取反(低9位)得到八进制0133 0666 & 0133 = 022,即所需umask为022,与正向计算结果一致。
- 对
- 目标权限
600- 对
600按位取反得到八进制0377 0666 & 0377 = 066,即所需umask为066。
- 对
- 目标权限
222- 对
222按位取反得到八进制0555 0666 & 0555 = 0444,即所需umask为0444。
- 对
关于对照表方法的说明
对照表方法是可行的,但完全没必要——公式可以直接计算出任意目标权限对应的umask,比查表更灵活,尤其适合处理不常见的权限组合。
内容的提问来源于stack exchange,提问作者alienCred
相关产品推荐
相关产品推荐

