我目前很难理解以下 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
控制符号链接的处理。这些后面的命令行参数被视为要检查的文件或目录的名称,直到第一个以-
、 或(
开头的参数!
。该参数和任何后续参数都被视为描述要搜索的内容的表达式。如果未给出路径,则使用当前目录。如果没有给出表达式,则-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 且可由其他人写入的文件。前两组表达式没有任何操作,因此它们被应用,但没有任何可见的效果。