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
-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的文件