我想创建一个具有权限位的文件: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?
提前致谢...
答案 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
但不会r
或w
2
(或二进制010
表示group
仅获得w
但不会r
或x
5
(或二进制的101
表示others
获取r
和x
但不是w
不幸的是,umask
允许的唯一操作是binary AND NOT
。它不允许整数减法。因此,由于您从0666 (000 110 110 110)
开始,因此无法使用AND NOT
来使0
中的任何一个转为1
}第
umask
或--- -w- r--
最接近0024
或110 (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'