-查找中的烫发标志

flo*_*mia 2 permissions find quoting

我正在尝试围绕这个命令:

find /home/ -type d \( -perm -0002 -a ! -perm -1000 \) 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

我知道它将在“home”目录中查找所有目录并将所有 stderr 消息重定向到一个文件(以抑制它们),但是我对中间的部分感到困惑,特别是:

\( -perm -0002 -a ! -perm -1000 \)
Run Code Online (Sandbox Code Playgroud)

斜线是什么意思?我假设! -perm -1000意味着查找没有这些权限的目录,-perm -0002意味着查找具有这些权限的目录,但我只习惯于以 644 形式查看权限(例如)。为什么是四位数?另外,-a国旗有什么作用?

ilk*_*chu 5

在 中-type d \( -perm -0002 -a ! -perm -1000 \),首先,斜杠转义了 shell 的括号,因此它们可以作为参数传递,而不是被 shell 解释为特殊运算符。(例如>,出于显而易见的原因,您需要相同的内容。)它们也可以写为'('or "(",但最终find只能看到(and )

括号将条件分组,并且-a连词。这也是背靠背条件的隐式默认值,就像这里使用的 with-type d和括号中的表达式一样,没有显式-a连接它们。该表达式完全等同于-type d -perm -0002 ! -perm -1000. 括号实际上只需要与or连词一起使用-o

-type d是显而易见的,手段寻找与文件的所有权限位的设置。或者,在这种情况下,设置了为他人写入权限 ( ) 并且未设置粘滞位 ( ) 的目录(因为否定)。我认为这里的组合也可以写成. 注意权限字符串前面的破折号,没有它,含义会有所不同。例如请参见Linux 手册页中的 find,查找“( expr )”和“-perm mode”。-perm -NNNNNNNN00021000-perm -o+w ! -perm -o+t

对目录的写访问允许创建、删除和重命名其中的文件,并且粘滞位防止删除和重命名其他用户拥有的文件。整个表达式查找任何人都可以删除或重命名任何文件的目录。