chmod -u 有什么作用?

chmod -u 有什么作用?

不小心我运行了它chmod -u filename,它删除了我拥有的所有权限filename

手册页没有引用-u选项。经过实验,我得出的结论是,它并没有删除所有权限,而只是删除了读取和执行访问权限,而保留了写入访问权限。

那么这到底是做什么的呢?


我上面的结论是错误的,我现在认为它所做的是从所有类别中删除所有者拥有的权限。


我认为该行为类似于a=u,只是它-代替了=并且a可以像使用例如 一样被删除a+x

答案1

这不是一个选项,而是指定权限的标准(但不常见)方法。这意味着为所有用户(无前面的、或)删除 ( -) 与文件所有者 ( ) 关联的权限。这uugo记录在手册页中。

GNU chmod 的手册页将其记录为:

符号模式的格式为[ugoa...][[-+=][perms...]...],其中perms是集合中的零个或多个字母rwxXst,或者是集合中的单个字母。乌戈

然后

您可以指定字母 ugo 之一,而不是这些字母中的一个或多个:授予拥有该文件的用户的权限 ( u)、授予属于该文件组的其他用户的权限 ( g) 以及授予不属于上述两个类别的用户的权限 ( o)

因此-u意味着删除 ( -) 当前为所有人 ( ) 启用的任何权限u(相当于a-u,但尊重当前的 umask 除外)。虽然这通常不是很有用,但chmod +u有时类似的情况是,例如在递归操作时将权限从所有者复制到其他人。


它是也记录在 POSIX 中,但定义更模糊:权限规范是广泛的who[+-=]perms(或数字),并且进一步指定了这些规范的效果:

永久复制符号ugo应分别表示与用户、组和文件模式位的其他部分关联的当前权限。对于本节的其余部分,请参阅语法中的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

相关内容