Contents

查找缺乏某些权限的文件

1. 概述

find命令是一个有用的工具,用于在我们的文件系统上查找符合特定条件的文件和目录。这些标准的一些示例是文件大小、创建时间、修改时间和权限。

虽然找到具有特定权限的文件很简单,但如何做相反的事情并不明显。

在本教程中,我们将了解如何查找没有特定权限的文件。

2. 查找具有指定权限的文件

假设我们有一些具有各种权限的文件:

$ ls -l
-rw------- 1 user user 0 Feb 17 19:31 file1
--w------- 1 user user 0 Feb 17 19:31 file2
-rwxr--r-- 1 user user 0 Feb 17 19:31 file3
-rw-r--r-- 1 user user 0 Feb 17 19:31 file4
-rw-r--r-- 1 user user 0 Feb 17 19:31 file5
-rw-r--r-- 1 user user 0 Feb 17 19:31 file6

我们可以使用find命令的*-perm*标志根据它们的权限来搜索它们。例如,让我们查找用户可执行的文件:

$ find . -type f -perm -u+x
./file3

但是现在,假设我们想要组不可读的文件列表。我们可能很想使用*-perm标志和-gr*作为参数:

$ find . -type f -perm -g-r
./file3
./file2
./file4
./file5
./file6
./file1

该命令返回了该组可读的所有文件,这与我们正在寻找的相反。

3. 否定*-perm*标志的值

要查找没有特定权限的文件,我们可以使用否定*(!)符号和-perm*标志:

$ find . -type f ! -perm -g+r
./file2
./file1

这正是我们想要的。属于该组的其他用户无法读取文件file1file2

让我们尝试进一步了解这种用法。我们首先查找组可读的文件,使用标志“ -perm -g+r ”来做到这一点。然后,我们否定了整个事情:“ ! -perm -g+r ”。

让我们尝试另一个例子来掌握它。以下是我们如何找到所有者不可读的文件:

$ find . -type f ! -perm -u+r
./file2

而且,这给了我们预期的输出。

4. find版本之间的变化

上面讨论的解决方案适用于大多数常见的类 Unix 操作系统。但是,GNU find变体使用 -readable 、 -writable 和 -executable 标志提供了一种更简单的方法。这些标志仅相对于所有者起作用,不能用于查找缺少其他权限的文件。

让我们列出登录用户可执行的所有文件:

$ find . -type f -executable
./file3

同样,我们可以找到所有者不可读的文件:

$ find . -type f ! -readable
./file2

但是,这些选项不适用于 BSD、macOS 或其他 Unix 变体。