1、locate
查询系统上预建的文件索引数据库:/var/lib/mlocate/mlocate.db
依赖于事先构建的索引
索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)
索引构建过程需要遍历整个根文件系统,极消耗资源
工作特点:
•查找速度快
•模糊查找
•非实时查找
•搜索的是文件的全路径,不仅仅是文件名
•可能只搜索用户具备读取和执行权限的目录
有用的选项
-i不区分大小写的搜索
-n N只列举前N个匹配项目
- 举例
locate conf ---搜索名称或路径中带有“conf”的文件
locate -r "\.conf$" ---使用Regex来搜索以“.conf”结尾的文件
2、 find
实时查找工具,通过遍历指定路径完成文件查找
工作特点:
•查找速度略慢
•精确查找
•实时查找
•可能只搜索用户具备读取和执行权限的目录
语法:
find [OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径;默认为当前目录
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
- 举例
find /etc/ -name "*.conf" ---文件名称支持使用通配符glob
find /etc/ -maxdepth 1 -name "*.conf" ---最大搜索目录深度为1
find /etc/ -maxdepth 2 -mindepth 2 -name "*.conf" ---只搜索第二层级
find / inum 2 -ls ---从根开始搜节点编号为2的文件并显示出来
find / -samefile f1 ---从根开始搜和f1节点号相同的文件
find /etc/ -regex ".*\.conf$" --- -regex 支持正则表达式,匹配的是整个文件的路径,而不仅仅是文件名
find / -user zhang -group zhang 所有者和所属组都是zhang的文件
-uid -gid -nouser -nogroup
find /etc/ -type l -ls ---按文件类型查找
f 普通文件d目录文件 l链接文件 s套接字文件 c字符文件 d设备文件 p管道文件
find /etc/ -size +10k -size -20k ---根据文件大小查找
find / -size 1024k ---表示(1023-1024k]
find / -size 1M ----表示(0-1M] 这个搜出来的结果比较多,因为是从0开始的
-size +10k ----表示(10k-∞)
-size -10k ----表示[0-9k]
-size 10k ----表示(9-10k]
3、德摩根定律
组合条件:
与:-a
或:-o
非:-not, !
德·摩根定律:
(非A) 或(非B) = 非(A 且B)
(非A) 且(非B) = 非(A 或B)
示例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
-举例
find / ! \( -user root -o -user zhang \) =find / ! -user root -a ! -user zhang --- !也可以用 -not表示
find /tmp -user root -o -not -name "f*"
[root@centos6 ~]#find /tmp -user root -o -not -name f* ---文件名用通配符表示必须用双引号,不然无法显示
find: paths must precede expression: f3
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
[root@centos6 ~]#find /tmp \( -user root -o -not -name "f*" \) -ls|wc -l
155 ---如果前面有或者的关系,用ls显示时要加括号,否则只显示或者之后匹配的内容
[root@centos6 ~]#find /tmp -user root -o -not -name "f*" -ls|wc -l
2
find /etc/ \( -path '/etc/sane.d' -o -path '/etc/fonts' \) -a -prune -o -name "*.conf" ---表示遇到括号里面的路径就挑出来不去搜索,但列出来这两个路径,搜索/etc/下文件名为以.conf结尾的文件。
[root@centos6 ~]#find /etc/ \( -path '/etc/sane.d' -o -path '/etc/fonts' \) -a -prune -o -name "*.conf"|wc -l
263
[root@centos6 ~]#find /etc \( -path '/etc/sane.d' -o -path '/etc/fonts' \) -a -prune -o -name "*.conf"|grep "sane.d"
/etc/sane.d ---只列出目录
[root@centos6 ~]#find /etc \( -path '/etc/sane.d' -o -path '/etc/fonts' \) -a -prune -o -name "*.conf"|grep "fonts"
/etc/fonts ---只列出目录,不进入搜