返回

CentOS 5.5 中 `find -perm -g-r` 为何匹配所有文件?

Linux

在 CentOS 5.5 中使用 find -perm -g-r 寻找不具有组可读权限的文件

问题:find -perm -g-r 匹配所有文件的原因

在 CentOS 5.5 中,find -perm -g-r 确实会匹配所有文件。这是因为该版本的 find 中,-perm 选项的语义与较新版本的 find 不同。

-perm 选项的语义

在较新版本的 find 中(例如 find 4.4.2 和更高版本),-perm 选项采用一个八进制文件模式作为参数。这个模式指定了文件或目录的权限。例如:

  • -perm 644:匹配权限为 644 的文件(用户可读/写,组可读,其他不可读/写)
  • -perm -g+r:匹配具有组可读权限的文件或目录(至少具有组可读权限)
  • -perm -g-r:匹配不具有组可读权限的文件或目录(即组不可读)

CentOS 5.5 中的 -perm 选项

然而,在 CentOS 5.5 中,-perm 选项采用一个更简单的语法。它只检查文件或目录是否具有特定的权限位。例如:

  • -perm -g:匹配具有组可读权限的文件或目录
  • -perm -r:匹配具有可读权限的文件或目录

请注意,在这个较旧的语法中,没有 用于指定权限位的否定形式。因此,-perm -g-r 只检查文件或目录是否具有组可读权限,而不管其他权限如何。

解决方法

为了在 CentOS 5.5 中找到不具有可读组权限的文件,你可以使用以下命令:

find . \! -perm -g

这个命令使用 \!(逻辑非)运算符来匹配不具有组可读权限的文件。

示例

以下示例展示了如何在 CentOS 5.5 中使用 find 命令找到不具有可读组权限的文件:

[root@localhost ~]# find . \! -perm -g
./file1.txt
./file2.txt

在这个示例中,./file1.txt./file2.txt 是不具有可读组权限的文件。

常见问题解答

1. 为什么在较新的 find 版本中更改了 -perm 选项的语义?

这主要是为了提供一个更一致和可预测的选项。较旧的语义容易出错,因为用户可能忘记指定八进制模式。

2. 是否有其他方法来查找不具有组可读权限的文件?

是的,你可以使用其他命令,例如 statls -l 来检查文件的权限。

3. 是否可以自定义 find 命令以使用较旧的 -perm 语义?

否,自定义 find 命令是不可能的。然而,你可以使用其他命令,例如 xargsgrep 来模拟较旧的语义。

4. find 命令还有哪些其他有用的选项?

find 命令还有许多其他有用的选项,例如 -name-type-exec。你可以查看 man find 以了解更多信息。

5. 我可以在哪里找到 find 命令的其他文档?

你可以在线找到大量的 find 命令文档,包括 GNU 文档和 Linux 手册页。