最近学习到了文件权限这一章,对于umask这个知识点的计算方法心中有点疑问,于是在网上查找了很多资料,大部分都是2010年以前的网页了,基本都是说目录权限就用777-umask,文件权限就用666-umask,如果这么简单的话那么当umask设置为022和033的时候为什么创建的文件权限都是644?所以,仅仅这种简单的方法显然是不太可取的,这种方法计算目录权限还行,文件的就不准了,下面总结了两种计算方法:


① 以二进制方式换算:

     先将将总的权限(目录777,文件666)和umask值都转换为2进制,然后对umask取反,再将两个2进制值做与运算,得到的二进制值再转换十进制,即为权限,


例如:666=0110 0110 0110umask=000=0000 0000 0000 NOT运算 1111 1111 11110110 0110 01101111 1111 1111------------------------------0110 0110 0110=666umask=011=0000 0001 0001 NOT运算 1111 1110 11100110 0110 01101111 1110 1110------------------------------0110 0110 0110=666umask=022=0000 0010 0010 NOT运算 1111 1101 11010110 0110 01101111 1101 1101------------------------------0110 0100 0100=644umask=033=0000 0011 0011 NOT运算 1111 1100 11000110 0110 0110 1111 1100 1100------------------------------0110 0100 0100=644



②第二种方法就是直接将权限数字代表的栏位写出来,进行对比判断,比较简单直观,适用于知道umask然后计算权限的考题,而对于给予权限然后计算umask的题目第一种方法可做参考:

umask=000(rw-rw-rw-)-(---------)=rw-rw-rw-=666umask=011(rw-rw-rw-)-(-----x--x)=rw-rw-rw-=666umask=022(rw-rw-rw-)-(----w--w-)=rw-r--r--=644umask=033(rw-rw-rw-)-(----wx-wx)=rw-r--r--=644umask=044(rw-rw-rw-)-(---r--r--)=rw--w--w-=622umask=055(rw-rw-rw-)-(---r-xr-x)=rw--w--w-=622