不小心我运行了它chmod -u filename
,它删除了我拥有的所有权限filename
。
手册页没有引用-u
选项。经过实验,我得出的结论是,它并没有删除所有权限,而只是删除了读取和执行访问权限,而保留了写入访问权限。
那么这到底是做什么的呢?
我上面的结论是错误的,我现在认为它所做的是从所有类别中删除所有者拥有的权限。
我认为该行为类似于a=u
,只是它-
代替了=
并且a
可以像使用例如 一样被删除a+x
。
答案1
这不是一个选项,而是指定权限的标准(但不常见)方法。这意味着为所有用户(无前面的、或)删除 ( -
) 与文件所有者 ( ) 关联的权限。这u
u
g
o
是记录在手册页中。
GNU chmod 的手册页将其记录为:
符号模式的格式为
[ugoa...][[-+=][perms...]...]
,其中perms
是集合中的零个或多个字母rwxXst
,或者是集合中的单个字母。乌戈
然后
您可以指定字母 ugo 之一,而不是这些字母中的一个或多个:授予拥有该文件的用户的权限 (
u
)、授予属于该文件组的其他用户的权限 (g
) 以及授予不属于上述两个类别的用户的权限 (o
)
因此-u
意味着删除 ( -
) 当前为所有人 ( ) 启用的任何权限u
(相当于a-u
,但尊重当前的 umask 除外)。虽然这通常不是很有用,但chmod +u
有时类似的情况是,例如在递归操作时将权限从所有者复制到其他人。
它是也记录在 POSIX 中,但定义更模糊:权限规范是广泛的who[+-=]perms
(或数字),并且进一步指定了这些规范的效果:
永久复制符号
u
、g
和o
应分别表示与用户、组和文件模式位的其他部分关联的当前权限。对于本节的其余部分,请参阅语法中的perm
非终结符perm
和。permcopy
进而
-
... 如果WHO未指定时,所有者、组和其他权限的 perm 表示的文件模式位,除了调用进程的文件模式创建掩码中对应的位外,均应清除。
答案2
答案有点类似于https://unix.stackexchange.com/a/429424/255251。
chmod -u file_name
不会删除所有权限,但它会考虑umask
价值。
umask
0022
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file
chmod -u file
chmod: file: new permissions are ----w--w-, not ---------
ls -l file
-----w--w- 1 user user 4 Feb 25 15:17 file
现在更改 umask 值
umask 777
chmod 777 file
chmod -u file
chmod: file: new permissions are rwxrwxrwx, not ---------
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file