Linux find命令:在目录中查找文件(3)


【例 2】"-perm-权限模式"。
如果使用"-权限模式",是代表的是文件的权限必须全部包含搜索命令指定的权限模式,才可以找到。

[root@localhost test]#find .-perm -200
./test4 <-此文件权限为200
./test3 <-此文件权限为600
./testl <-此文件权限为755
#搜索文件的权限包含200的文件,不会找到test2文件,因为test2的权限为444,不包含200权限

因为 test4 的权限 200(-w-------)、test3 的权限 600(-rw-------)和 test1 的权限 755(-rwxr-xr-x) 都包含 200(--w-------) 权限,所以可以找到;而 test2 的权限是 444 (-r--r--r--),不包含 200 (--w-------)权限,所以找不到,再试试:

[root@localhost test]# find .-perm -444
.
./test2 <-此文件权限为444
./test1 <-此文件权限为755
#搜索文件的权限包含444的文件

上述搜索会找到 test1 和 test2,因为 test1 的权限 755 (-rwxr-xr-x)和 test2 的权限 444 (-r--r--r--)都完全包含 444 (-r--r--r--)权限,所以可以找到;而 test3 的权限 600 (-rw-------)和 test4 的权限 200 (-w-------)不完全包含 444 (-r--r--r--) 权限,所以找不到。也就是说,test3 和 test4 文件的所有者权限虽然包含 4 权限,但是所属组权限和其他人权限都是 0,不包含 4 权限,所以找不到,这也是完全包含的意义。

【例 3】"-perm+权限模式"
刚刚的"-perm-权限模式"是必须完全包含,才能找到;而"-perm+权限模式"是只要包含任意一个指定权限,就可以找到。我们来试试:

[root@localhost test]# find .-perm +444
./test4 <-此文件权限为200
./test3 <-此文件权限为600
./testl <-此文件权限为755
#搜索文件的权限包含200的文件,不会找到test2文件,因为test2的权限为444,不包含200权限。

因为 test4 的权限 200 (--w-------)、test3 的权限 600 (-rw-------)和 test1 的权限 755 (-rwxr-xr-x)都包含 200(--w-------)权限,所以可以找到;而 test2 的权限是 444 (-r--r--r--),不包含 200 (--w-------)权限,所以找不到。

按照所有者和所属组搜索

[root@localhost ~]# find 搜索路径 [选项] 搜索内容

选项:

-uid 用户 ID:按照用户 ID 査找所有者是指定 ID 的文件

-gid 组 ID:按照用户组 ID 査找所属组是指定 ID 的文件

-user 用户名:按照用户名査找所有者是指定用户的文件

-group 组名:按照组名査找所属组是指定用户组的文件

-nouser:査找没有所有者的文件


这组选项比较简单,就是按照文件的所有者和所属组来进行文件的査找。在 Linux 系统中,绝大多数文件都是使用 root 用户身份建立的,所以在默认情况下,绝大多数系统文件的所有者都是 root。例如:

[root@localhost ~]#find.-user root
#在当前目录中査找所有者是 root 的文件

由于当前目录是 root 的家目录,所有文件的所有者都是 root 用户,所以这条搜索命令会找到当前目录下所有的文件。

按照所有者和所属组搜索时,"-nouser"选项比较常用,主要用于査找垃圾文件。在 Linux 中,所有的文件都有所有者,只有一种情况例外,那就是外来文件。比如光盘和 U 盘中的文件如果是由 Windows 复制的,在 Linux 中査看就是没有所有者的文件;再比如手工源码包安装的文件,也有可能没有所有者。

除这种外来文件外,如果系统中发现了没有所有者的文件,一般是没有作用的垃圾文件(比如用户删除之后遗留的文件),这时需要用户手工处理。搜索没有所有者的文件,可以执行以下命令:

[root@localhost ~]# find/-nouser

按照文件类型搜索

[root@localhost ~]# find 搜索路径 [选项] 搜索内容

选项:

-type d:查找目录

-type f:查找普通文件

-type l:查找软链接文件


这个命令也很简单,主要按照文件类型进行搜索。在一些特殊情况下,比如需要把普通文件和目录文件区分开,比如需要把普通文件和目录文件区分开,使用这个选项就很方便。

[root@localhost ~]# find /etc -type d
#查找/etc/目录下有哪些子目录

逻辑运算符

[root@localhost ~]#find 搜索路径 [选项] 搜索内容

选项:

-a:and逻辑与

-o:or逻辑或

-not:not逻辑非

1) -a:and逻辑与

find 命令也支持逻辑运算符选项,其中 -a 代表逻辑与运算,也就是 -a 的两个条件都成立,find 搜索的结果才成立。

举个例子:

[root@localhost ~]# find.-size +2k -a -type f
#在当前目录下搜索大于2KB,并且文件类型是普通文件的文件

在这个例子中,文件既要大于 2KB,又必须是普通文件,find 命令才可以找到。再举个例子:

[root@localhost ~]# find.-mtime -3 -a -perm 644
#在当前目录下搜索3天以内修改过,并且权限是644的文件

2) -o:or逻辑或

-o 选项代表逻辑或运算,也就是 -o 的两个条件只要其中一个成立,find 命令就可以找到结果。例如:

[root@localhost ~]#find.-name cangls -o -name bols
./cangls
./bols
#在当前目录下搜索文件名要么是cangls的文件,要么是bols的文件

-o 选项的两个条件只要成立一个,find 命令就可以找到结果,所以这个命令既可以找到 cangls 文件,也可以找到 bols 文件。

3) -not:not逻辑非

-not是逻辑非,也就是取反的意思。举个例子:
[root@localhost ~]# find.-not -name cangls
#在当前目录下搜索文件名不是cangls的文件

其他选项

1) -exec选项
这里我们主要讲解两个选项"-exec"和"-ok",这两个选项的基本作用非常相似。我们先来看看 "exec"选项的格式。

[root@localhost ~]# find 搜索路径 [选项] 搜索内容 -exec 命令2{}\;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13897.html