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