我已经尝试了几个小时来弄清楚命令语法来查找满足任何这些标准,但我似乎无法弄清楚。
- 用户尚未阅读
- 用户无权写入
- 群组尚未阅读
- 组无权写入
- 其他还没读过
- 其他人已经写
- 其他已执行
我以此开始,但找不到所有预期的文件。例如,它找不到其他人已读取但也执行的文件。
find /path -type f \( ! -perm /u=rw,g=rw -or ! -perm /o=r \) -print
答案1
简短回答
find ./ -type f ! \( -perm -u=rw -and -perm -g=rw -and -perm -o=r -and ! -perm /o=wx \)
长答案
因为指定我们想要的东西似乎更容易(X 有 是权限)中find
,让我们尝试结合表达式:我们可以看到一个文件应该不是匹配有全部已验证以下条件:
- 用户有读写权限
- 组有读写权限
- 其他人已读
- 其他人没有(写入或执行)
所以现在我们有更多有比以前(5 vs 2)。我写了查找文件的命令,你不是想:
find ./ -type f -perm -u=rw -and -perm -g=rw -and -perm -o=r -and ! -perm /o=wx
要理解这一点,你必须-
注意所有权限和/
手段任何权限。
然后我将其与 ! 和括号结合起来以获得该答案顶部的命令。
测试
让我们创建仅验证每个标准中的一个的标准的文件:
mkdir demo && cd demo
touch a b c d e f g
chmod 777 a b c d e f g
chmod u-r a
chmod u-w b
chmod g-r c
chmod g-w d
chmod o-r e
chmod o-w a b c d e g
chmod o-x a b c d e f
然后让我们创建所有不应该匹配的文件:我们有自由
- 用户执行权限
- 团体执行权
这正好给出了 2^2 = 4 种不应匹配的完整权限。让我们根据以下条件创建 4 个文件:
touch h i j k
chmod 664 h i j k
chmod u+x h i
chmod g+x h j
提供的命令应该匹配文件 a 到 e,但不匹配文件 h 到 k。当然,这个测试并不详尽,因为有 256 种权限需要测试。