我发现这sudo -u <user> test
可能有效,但我的系统上没有 sudo 命令。
例如
/a d......--x
/a/aa d......--x YES
/b d......---
/b/bb d......--x NO
当我使用root用户时,无法使用test
命令确定“其他”的权限。我发现的相关问题:测试用户对文件的有效权限
答案1
操作方法如下:
find ./ ! -perm -o=x -prune -o \( -type d ! -perm /o=rw -perm -o=x -print \)
! -perm -o=x -prune
- 不要进入没有“其他”执行位的目录。- 括号并不是真正必需的,我添加它们只是为了清楚起见。如果没有它们,该命令的工作方式相同。
-print
如果末尾没有显式的内容,find
则也会打印修剪后的目录(不会下降的目录,即那些没有“其他”执行位的目录)。显式-print
确保仅打印在右侧(修剪之后)找到的目录。
现在,这个命令将是最明显的一个。然而,有一些方法可以通过执行一些逻辑缩减来使其更短。
首先,如果你想一想,你不需要第二个-perm -o=x
;如果第一个! -perm -o=x
计算结果为“True”(意味着文件夹上没有执行位),它甚至不会到达右侧-o
(因为从逻辑上讲,在检查后整个表达式将被计算为“True”)第一个条件)。这意味着只有当文件上的其他部分有执行位时,才会评估括号内的整个部分。
最重要的是,-perm -o=x
括号内的部分是多余的,可以删除。
find ./ ! -perm -o=x -prune -o \( -type d ! -perm /o=rw -print \)
-print
现在,正如我所说,我们最后需要的原因是因为-prune
操作返回“True”,并且我们不想打印那些修剪过的目录。但是,我们可以通过在;!
之前添加来反转“True” 。-prune
这些文件夹仍将被修剪,但结果将为“False”,因此它们无论如何都不会被打印。
find ./ ! -perm -o=x ! -prune -o \( -type d ! -perm /o=rw -print \)
然后我们就不再需要-print
最后的了。
find ./ ! -perm -o=x ! -prune -o \( -type d ! -perm /o=rw \)
正如我所说,您可以删除括号。这就是你最终得到的:
最终缩短的命令:
find ./ ! -perm -o=x ! -prune -o -type d ! -perm /o=rw