理解以下 find 命令

理解以下 find 命令

我目前很难理解以下 find 命令:

find / -o -group `id -g` -perm \ 
 -g=w -perm -u=s -o -perm -o=w\
 -perm -u=s -o -perm -o=w \
 -perm -g=s -ls 

具体来说这部分:

find / -o -group `id -g` -perm -g=w -perm -u=s

我知道 -o 的作用就像或运算符一样。如果是这种情况,那么该特定行是否意味着查找 / 中的所有文件或具有组写入权限且设置了 suid 且与我的组相同的文件。这基本上仍然意味着 / 目录中的所有文件。有人可以向我解释我缺少什么吗?

答案1

来自find(1)联机帮助页:

-H-L和选项-P控制符号链接的处理。这些后面的命令行参数被视为要检查的文件或目录的名称,直到第一个以-、 或(开头的参数!。该参数和任何后续参数都被视为描述要搜索的内容的表达式。如果未给出路径,则使用当前目录。如果没有给出表达式,则-print使用该表达式(但-print0无论如何,您可能应该考虑使用它)。

在您的情况下,起点的/处理方式与表达式不同。后者,

-o -group `id -g` -perm \ 
-g=w -perm -u=s -o -perm -o=w\
-perm -u=s -o -perm -o=w \
-perm -g=s -ls

在您的情况下,适用于从起点找到的所有文件。-o是一个二元运算符,两边都需要表达式,所以这个命令实际上失败了:

发现:无效的表达式;您使用了二元运算符“-o”,前面没有任何内容。

如果删除第一个-o,它就相当于

   ( -group `id -g` -perm -g=w -perm -u=s )
-o ( -perm -o=w -perm -u=s )
-o ( -perm -o=w -perm -g=s -ls )

它只列出被 setgid 且可由其他人写入的文件。前两组表达式没有任何操作,因此它们被应用,但没有任何可见的效果。

相关内容