为什么umask结果与权限位不同

时间:2013-12-20 20:27:02

标签: linux

我想创建一个具有权限位的文件:125 => --x-w-r-x。

因此umask值应为=> 666-125 = 541

所以当我在下面写下命令时;

umask 541
touch /tmp/newfile
ls -l /tmp/newfile

the result is :  --w--w-rw-

为什么结果不是--x-w-r-x?

提前致谢...

2 个答案:

答案 0 :(得分:3)

普通文件的默认起始位(与目录或符号链接相对)是0666。让我们将其分解为组件权限:

  • 0表示没有设置特殊权限(例如setuid(4),setgid(2)或sticky(1))
  • 第一个6(或二进制110表示user获得r(第一个1)和w(第二个1)但不是x(默认为0
  • 第二个6表示与第一个6相同,但对于group而不是user
  • 第三个6表示与第一个6相同,但对于others而不是user

现在您要此默认值更改为0125

  • 0表示如上所述
  • 1(或二进制001表示user仅获得x但不会rw
  • 2(或二进制010表示group仅获得w但不会rx
  • 5(或二进制的101表示others获取rx但不是w

不幸的是,umask允许的唯一操作是binary AND NOT。它不允许整数减法。因此,由于您从0666 (000 110 110 110)开始,因此无法使用AND NOT来使0中的任何一个转为1 }第

umask--- -w- r--最接近0024110 (6)user来自100 (4)默认group默认为010 (2)others默认为umask 642 touch file.txt 000 110 110 110 &~ 000 110 100 010 --- --- --- --- 000 000 010 100 0 0 2 4 --- -w- r-- file.txt 。然后,您创建的每个新文件都将

x

如果您希望新文件具有touch权限,则必须在第二步中添加它们(或使用chmod u+x,o+x file.txt以外的其他内容),例如:umask

::编辑:: 您经常会看到奇数值0777的原因是因为默认的目录权限为x,因此用户可能希望指定x发生的情况这些权限。但无论您在umask中指定的umask 0027 touch file.txt 000 110 110 110 &~ 000 000 010 111 --- --- --- --- 000 110 100 000 0 6 4 0 rw- r-- --- file.txt mkdir directory 000 111 111 111 &~ 000 000 010 111 --- --- --- --- 000 111 101 000 0 7 5 0 rwx r-x --- directory/ 位是什么,它都不会影响文件权限:

x

因此,您可以在创建新目录时在umask中指定{{1}}个掩码,但它们对文件创建没有影响。

答案 1 :(得分:1)

来自fopen(3)手册页:

   Any  created files will have mode S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP
   | S_IROTH | S_IWOTH (0666), as modified by the  process's  umask  value
   (see umask(2)).

如果您想要设置任何其他位,则必须在创建后显式更改它们。 touch不这样做。

另外,你的数学错了。

>>> oct(0666 & ~0125)
'0642'