find命令有很多选项或表达式,每一个选项前面跟随一个横杠-,让我们先来看一下该命令的主要选项,然后再给出一些例子。
find [路径] [查找条件] [处理动作]
查找条件:
-name 精确查找文件并区分大小写
-iname 查找文件的时候不区分大小写
-user 用户名 表示根据属主名来查找文件
-group 组名 表示根据属组名来查找文件
-uid 查找用户UID文件
-gid 查找用户GID文件
-nouser 查找没有属主文件
-nogroup 查找没有属组的文件
-name
在/etc目录下查找a.txt这个文件
find /etc -name a.txt
-iname
在/etc目录下查找a.txt和A.txt文件
find /etc -iname A.txt
注意:此时不管你是查找a.txt和A.txt两个都会显示出来
-user
在/etc目录下查找属主为redhat的文件
find /etc -user redhat
-group
在/etc目录下查找属组为test的文件
find /etc -group test
-uid
在/etc目录下查找uid为502的文件
find /etc -uid 502
-gid
在/etc目录下查找gid为502的文件
find . -gid 502
-nouser
在/root目录下查找没有属主的文件
[root@bogon ~]# ll test.txt
-rw-r--r-- 1 redhat redhat 0 Jun 5 21:43 test.txt /查看test.txt文件的属主和属组为redhat/
[root@bogon ~]# userdel -r redhat /把redhat这个用户删除,这样属主和属组变成uid和gid了/
[root@bogon ~]# ll
-rw-r--r-- 1 502 502 0 Jun 5 21:43 test.txt
[root@bogon ~]# find /root -nouser
./test.txt
-nogroup
在/root目录下查找没有属组的文件跟上面一样,相信你会操作了吧
[root@bogon ~]# find /root -nogroup
多条件查找,条件间逻辑关系:
并:-a 表示两个都满足的时候才显示
或:-o 表示一个满足的时候都显示出来
非:!,-not
-a
在/tmp目录下查找以passwd开头和结局的文件并且属主是redhat的文件
[root@bogon tmp]# ll
-rw-r--r-- 1 root root 1621 Jun 4 15:10 buildscript
-rwx------ 1 root root 3254 Jun 4 23:06 ks-script-_RvIMn
-rw-r--r-- 1 root root 268 Jun 4 15:10 ks-script-_RvIMn.log
[root@bogon tmp]# useradd redhat
[root@bogon tmp]# su - redhat
[redhat@linux ~]$ cd /tmp/
[redhat@linux tmp]$ touch apasswdb
[redhat@linux tmp]$ touch test.txt
[redhat@linux tmp]$ exit
logout
[root@bogon tmp]# ll
total 32
-rw-rw-r-- 1 redhat redhat 0 Jun 5 22:42 apasswdb
-rw-r--r-- 1 root root 1621 Jun 4 15:10 buildscript
-rwx------ 1 root root 3254 Jun 4 23:06 ks-script-_RvIMn
-rw-r--r-- 1 root root 268 Jun 4 15:10 ks-script-_RvIMn.log
-rw-rw-r-- 1 redhat redhat 0 Jun 5 22:42 test.txt
[root@bogon tmp]# find /tmp -name "*passwd*" -a -user redhat
/tmp/apasswdb
[root@bogon tmp]# find /tmp -name "*passwd*" -o -user redhat
/tmp/apasswdb
/tmp/test.txt
-o
在/tmp目录下查找以passwd开头和结尾的文件或者属主是redhat的文件
[root@bogon tmp]# find /tmp -name "*passwd*" -o -user redhat
!,not
在/tmp目录下查找不是以passwd开头和结尾的文件或者是属主不是redhat的文件
[root@bogon tmp]# find /tmp -not -name "*passwd*" -o -not -user redhat
在/tmp目录下查找不是以passwd开头和结尾的文件并且属主不是redhat的文件
[root@bogon tmp]# find /tmp -not \( -name "*passwd*" -a -user redhat \)
注意:上面两个例子的结果是一样的,除了apasswdb这个文件不显示,其他都显示,\表示转义
文件类型查找:
-type
f 普通文件
d 目录
l 符号链接文件
b 块设备文件
c 字符设备文件
p 管道文件
s socket文件
f
在/root目录下查找普通文件
find /root/ -type f
注意:f前面不要加-
d
在/root目录下查找目录
find /root -type d
l
在/root目录下查找符号链接文件
find /root -type l
......就不一一举例了
大小:
-size [+/-]大小查找 ,不指定的话是字节
k find /etc -size +1K 表示查找大于1K的文件
M
find /etc -size +2M 表示查找大于2M的文件
find /etc -size -2M 表示查找小于2M的文件
find /etc -size 2M 表示0.8M 1M都不显示,1.1M就满足条件了并且显示
G find / -size +1G 表示查找大于1G的文件
天:
-atime [+/-] 表示访问时间
-mtime [+/-] 表示修改内容的时间
-ctime [+/-] 表示关于文件权限,属主的时间
4
<--->
<-----------+4 -4---------------->
<----|---|---|---|---|---|---|---现在
7 6 5 4 3 2 1
+4表示大于等于5天前的文件名 find / -mtime +4
-4表示小于等于4天内的文件名 fine / -mtime -4
4 表示4-5那一天修改的文件名 find / mtime 4
例子:
查找/var目录下 4天内被改动的过的文件名
find /var -mtime -4
查找/var目录下 第4天被改动过的文件名
find /var -mtime 4
查找/var目录下 4天以前被改过的文件名
find /var -mtime +4
分钟:
-amin [+/-]
-mmin [+/-]
-cmin [+/-]
补充知识点:
-newer 用在分辨两个文件之间的新旧关系
例子:查找/etc下面的文件,如果文件日期比/etc/passwd的新就列出
find /etc -newer /etc/passwd
按权限查找:
-perm
mode :表示精确匹配
/mode: 表示任何一位匹配
-mode: 表示所有都得匹配
在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件
find . -perm 755 -print
处理动作:
-print 命令,将结果打印在屏幕,这个操作是默认操作
-ls 命令,以ls命令详细显示
-ok 命令 {} \; 表示执行命令提示
-exec 命令 {} \; 表示执行命令不提示
-print
查找/var目录下4天内被改动的过的文件名
find /var -mtime -4 -print
find /var -mtime -4
注意:查找的结果是一样的,-print是默认操作
-ls
查找/var目录下4天内被改动的过的文件名,以ls命令详细显示权限,大小,时间等等
find /var -mtime -4 -ls
-ok
查找/var目录下4天内被改动的过的文件名并删除,不过这个命令会提示你, 一个一个删除
find /var -mtime -4 -ok rm {} \;
-exec
查找/var目录下4天内被改动的过的文件名,以详细信息显示,不只是显示权限,大小,时间等等,还可以处理动作,
比如改变属主,删除文件等,这里为了理解只是简单例子
find /var -mtime -4 -exec ls -lh {} \;
总结:find的命令非常实用,还可以配置 xargs 执行额外的命令,通过管道,总之掌握好find你工作会轻松很多