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
国旗有什么作用?
在 中-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 -NNNN
NNNN
0002
1000
-perm -o+w ! -perm -o+t
对目录的写访问允许创建、删除和重命名其中的文件,并且粘滞位防止删除和重命名其他用户拥有的文件。整个表达式查找任何人都可以删除或重命名任何文件的目录。