如何查找权限大于xxx的文件但忽略SUID和SGID的文件

如何查找权限大于xxx的文件但忽略SUID和SGID的文件

我正在尝试查找权限超过 755 的文件。使用以下解决方案另一个帖子在这里我已经能够得到我想要的大部分东西:

find /bin -type f -perm -755 ! -perm 755

这确实会忽略 755 或更低的任何内容,但它会返回设置了 SUID 和 SGID 位的文件。我想忽略这些。是否可以通过一个命令来完成此操作?我已经尝试了! -perm两者的多个参数20004000但没有任何作用。

我还在顺序命令中使用了2755and 4755,但同样,我更喜欢在一个命令中涵盖两者。

我认为该-o运算符会有所帮助,但我不确定如何使用包含我正在使用的否定模式的参数来做到这一点。我试过了

find . -type f \(-perm -2755 ! -perm 2755 -o -perm -4755 ! -perm 4755\)

但这只是引发了paths must precede expression错误。

答案1

适用于任何POSIX 兼容查找如下:

find DIR -type f -perm -0755 ! -perm 0755 ! -perm -04000 ! -perm -02000 -print

如前所述,使用 GNU find 您可以将 setuid 和 setgid 测试折叠到! -perm /06000.

答案2

我不确定我明白你想要什么,但是,根据我的最佳猜测,

寻找  (起始目录)  -类型f -烫发-755! -烫发755! -烫发/6000

似乎会这么做。  意思是“任何权限位-perm /mode模式为文件设置。”因此 -perm /6000应该仅匹配 SUID 或 SGID(或两者)的文件,并且! -perm /6000应该排除这些文件。

顺便说一句,我认为你的问题中的 是一个拼写错误,因为你答对了(,没有第二个-type -f-type f-)在你的第二个例子中。


PS它仍然没有做你想做的事,但你可以让你的第二个例子来做某物 (即列出一些文件,而不是说paths must precede expression)只需将其更改为

find . -type f \( -perm -2755 ! -perm 2755 -o -perm -4755 ! -perm 4755 \)

即,将\(and\)与相邻参数分开(用空格)。

相关内容