首页 > 代码库 > Linux文件查找之find&locate

Linux文件查找之find&locate

Linux文件查找之find&locate

一、概述

    Linux系统核心的思想之一“一切皆文件“,对于这么多的文件,如何快速查找过滤呢?下面我们就看看系统提供的文件查找命令find和locat,熟练使用find命令是运维人员的必经之路


二、find的用法及示例

1.find特点

查找速度略慢

精确查找

实时查找

只能搜索有读取和执行权限的目录


2.find用法

     用法:find  [options]  [查找路径]  [ 查找条件]  [处理动作]

     查找条件:

根据文件类型查找
	-type f|d.......
	f			普通文件
	d			目录
	l			链接
	s			套接字
	b			块设备
	c			字符设备	
	p			管道文件
	根据属主、属组查找
	-user name			查找目录下属主为name的文件
	-group g1			查找属组为g1的文件
	-uid #			查找uid为#的文件
	-gid #			查找gid为#的文件
	-nouser			查找没有属主的文件
	-nogroup			查找没有属组的文件
	特定选项
	-mindepth level		设置最小搜索层级
	-maxdepth level		设置最大搜索层级
	-name				匹配文件名搜索,支持通配符	
	-iname			以名称搜索,忽略文件名大小写
	-inum #			按inode号搜索
	-samefile 			搜索相同inode号的文件
	-links #			搜索链接数为#的文件
	-regex "pattern"		搜索匹配该字符串的文件
	-prune			将某个目录排除在搜索路径之外
	根据文件大小查找
	-size  [+|-]#(单位)	常用单位:k  M  G
  	      	6k		表示5k<S≤6k
			-6k		表示0≤S≤5k
			+6k		表示S>6k 
	根据时间戳查找	
	-atime  [+|-]#		+5:5天以前  -10:十天以内
	-atime   			访问时间,以天为单位 
	-mtime			更改时间,以天为单位
	-ctime			改变时间,以天为单位
	-amin				以分钟为单位
	-mmin				以分钟为单位
	-cmin				以分钟为单位

根据权限查找

-perm [/|-]mode

mode 精确权限匹配 如:find -perm 222  匹配权限为222的文件  

/mode 权限位(ugo),只要有一位匹配即可,或者关系  

                如:find -perm /222  只需一个权限位有写权限即可

-mode 指定权限权限位都必须匹配  

                如:find -perm -222  各权限位都有写权限

注意三种权限的区别

组合条件

-a

-o

-not,!

烧脑的非选项

!A -a !B=!(A -o B)

!A -o !B=!(A -a B)

      处理动作

-print 打印匹配文件

-ls 长格式显示匹配文件

-delete 删除匹配文件

-fls outfile 输出到指定文件

-ok cmd {} \; 对查找到的每个文件执行cmd命令,交互确认

-exec cmd {} \; 执行cmd命令,不进行交互确认

{} 代表查找到的文件自身

注意:由于是find查找到的文件,是一次性传递给后面的cmd命令,有写命令会出现报错现象,可使用xargs解决

find  .......   |   xargs   cmd

3.find使用实例

①、搜索/var目录下文件名中含有log的文件

find /var -name "*log*"

②、搜索/app目录下属主为tom,数组为g1的文件

find /app  -user tom -a -group g1

③、搜索/app目录下属主不是tom,也不是joe的文件

find /app -not -user tom -a -not -user -joe

find /app -not \(-user tom -o -user joe\)

④、删除存在时间超过3天以上,属主为tom的临时文件

find /tmp -ctime +3 -user tom -ok rm {} \;

⑤、查找自己家目录可以被其他用户写入的文件,并去掉其他用户的写权限

find ~ -perm -022 -exec  chmod  o-w  {}  \;

⑥、查找/var目录下10以前修改的文件

find /var -mtime +10 -print

⑦、查找/var目录下10以内修改的文件

find /var -mtime -10 

⑧、查找/var目录更改时间下比file1.log新,比file2.log旧的文件

find /var -newer file1.log -a -not -newer file2.log

⑨、查找/etc一级目录下所有的目录文件

find /etc -maxdepth 1 -type d 

⑩、查询/目录下大于100M的文件

find / -size +100M

11、删除/root一级目录中非隐藏文件的普通文件

find ~ -maxdepth 1 -type f |grep -v "/root/\."

12、查询当前系统中没有属主和属组的文件

find / -nouser -a -nogroup

13、查找系统中所有具备suid权限的文件

find / -perm /u=s

14、查找系统中所有具备sgid权限的文件

find / -perm /g=s

15、查找/etc所有可执行文件

find /etc -perm /a=x

16、查找系统中所有空文件

find / -type f -empty      

17、查询/etc目录下所有隐藏文件

find /etc -type f -name ".*"

18、查找50-100内被修改过的文件

find / -mtime +50  -mtime -100

19、查找最近1小时被修改过的文件

find / -mmin -60


三、locate用法及示例


1、locate概述

相比find,locate查找速度比较快,但由于其仅支持非实时查找,使用率不高


2、locate工作特点

查找速度快

非实时查找

搜索文件全路径

只能搜索用户具备读取和执行权限的目录


3、locate用法

locate [options]  匹配模式

-i 不区分大小写搜索

-n # 只列举前#个匹配项


4、示例

locate conf 查找文件名中含有conf的文件


Linux文件查找之find&locate