如何在Linux中根据文件权限查找文件
在Linux中从命令行查找文件更加容易和快捷。
我们已经知道如何根据访问和修改日期和时间查找和排序文件。
今天,我们将看到如何在类似Unix的操作系统中根据文件的权限查找文件。
出于本教程的目的,我将在名为theitroad的文件夹中分别创建三个文件,分别为777、766和655,权限分别为file1,file2和file3.
$mkdir theitroad && cd theitroad/
$install -b -m 777 /dev/null file1
$install -b -m 766 /dev/null file2
$install -b -m 655 /dev/null file3
现在,让我们根据文件的权限查找文件。
根据文件权限查找文件
根据其权限查找文件的典型语法为:
$find -perm mode
MODE可以具有数字或者八进制权限(例如777、666等),也可以具有符号权限(例如u = x,a = r + x)。
我们可以通过以下三种不同的方式指定MODE。
- 如果我们指定不带任何前缀的模式,它将找到具有确切权限的文件。
- 如果我们在模式下使用“-”前缀,则至少文件应具有给定的权限,而不是确切的权限。
- 如果我们使用“ /”前缀,则所有者,组或者其他人都应对该文件具有许可权。
请允许我用一些示例进行解释,以便我们更好地理解。
首先,我们将看到基于数字权限查找文件。
根据文件的数字(八进制)权限查找文件
现在让我运行以下命令:
$find -perm 777
此命令将在当前目录中找到权限为777的文件。
如我们在上面的输出中看到的,file1是唯一具有确切777权限的文件。
现在,让我们使用“-”前缀,看看会发生什么。
$find -perm -766
如我们所见,以上命令显示了两个文件。
我们已经为文件2设置了766权限,但是此命令显示两个文件,为什么?
因为,这里我们使用了“-”前缀。
这意味着该命令将查找文件拥有者具有读/写/执行权限,文件组成员具有读/写权限以及所有其他内容也具有读/写权限的所有文件。
在我们的例子中,file1和file2都满足此条件。
换句话说,文件不必具有确切的766许可权。
它将显示属于766许可权的所有文件。
接下来,我们将使用“ /”前缀,看看会发生什么。
$find -perm /222
上面的命令将查找可被某人(其所有者,他们的组或者其他任何人)写入的文件。
这是另一个例子。
$find -perm /220
此命令将查找文件的所有者或者组可写的文件。
这意味着文件不必由所有者和组都可写才能匹配。
两者都会做。
但是,如果我们运行带有“-”前缀的相同命令,则只会看到所有者和组都可写的文件。
$find -perm -220
以下屏幕截图将向我们显示这两个前缀之间的区别。
我们也可以使用符号表示法来表示文件权限。
使用符号表示法根据文件的权限查找文件
在以下示例中,我们使用符号表示法,例如u(用于用户),g(组),o(其他)。
我们还可以使用字母a来代表所有这三个类别。
可以使用字母r(读),w(写),x(可执行)指定权限。
例如,要查找具有组写许可权的任何文件,请运行:
$find -perm -g=w
如我们在上面的示例中看到的,file1和file2具有组写入权限。
请注意,我们可以使用“ =”或者“ +”来表示符号。
没关系例如,以下两个命令将执行相同的操作。
$find -perm -g=w $find -perm -g+w
要查找文件所有者可写的任何文件,请运行:
$find -perm -u=w
要查找所有人(文件所有者,组和其他所有人)都可写的任何文件,请运行:
$find -perm -a=w
要查找所有者和组均可写的文件,请使用以下命令:
$find -perm -g+w,u+w
上面的命令等效于“ find -perm -220”命令。
要查找其所有者或者组可写的文件,请运行:
$find -perm /u+w,g+w
或者,
$find -perm /u=w,g=w
这两个命令与“ find -perm/220”命令执行相同的工作。