简短回答

简短回答

我已经尝试了几个小时来弄清楚命令语法来查找满足任何这些标准,但我似乎无法弄清楚。

  • 用户尚未阅读
  • 用户无权写入
  • 群组尚未阅读
  • 组无权写入
  • 其他还没读过
  • 其他人已经写
  • 其他已执行

我以此开始,但找不到所有预期的文件。例如,它找不到其他人已读取但也执行的文件。

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 种权限需要测试。

相关内容