一、非实时超找工具 locate
1、locate是查询系统上预建的文件索引数据库/var/lib/mlocate/mlocate.db文件索引实在系统比较空闲的时候自动进行的,是系统的周期性任务,因为是周期性任务,所以有些短期的数据无法更新到数据库,如果需要马上应用,乣管理员手动更新数据库,用命令updatedb来执行。同时索引的构建过程是遍历整个根文件系统,所以非常消耗系统资源,最好是在系统空闲时间进行更新。
2、locate超找的特点:
(1)查找速度快。因为是查找预先建立起来的索引数据库,不需要查找整个文件系统,所以速度快速
(2)模糊超找
(3)非实时超找
(4)搜索的文件是全路径,不仅仅是文件名
(5)只能搜索用户具备读取和执行权限的目录
3、locate命令的用法
locate [OPTION] KEYWORD
常用选项
-i 执行区分大小写的搜索
-n X 只列举前X个匹配项目
-r 支持正则表达式
二、实时超找工具find
1、find是实时超找工具,查找时通过遍历指定路径完成文件的超找
2、工作特点
(1)查找速度略慢
(2)能够时间精确查找
(3)实时查找
(4)只能搜索用户具备读取和执行权限的目录
3、语法
find [option]…[查找路径] [查找条件] [处理动作]
[查找路径]:
可以使用-path选项,来使用通配符匹配路径
指定具体目标路径,默认为当前工作目录, .指定当前工作目录, ..指定父目录
[查找条件]:
指定的查找标准,可以是文件名、大小、类型、权限等标准进行;默认为找出路径下的所有文件
[处理动作]:
对符合条件的文件做操作,默认输出值屏幕
4、查找条件
(1)根据文件名、inode查找和正则表达式查找
-name “文件名称”,支持使用glob(通配符)* ? [] [^]等。-name总是用给定的文件名进行匹配,
-path则将文件路径作为一个整体进行匹配,例如
-name "文件名称",不区分字母大小写
-inum n 按inode号码超找
-samefile name 相同inode号码超找
-links n 链接数为n的文件
-regex "pattern" 以pattern匹配整个文件路径字符串,而不仅仅是文件名称
(2)根据属主、属组查找
-user USERNAME
查找属主为指定用户(UID)的文件
-group GRPNAME
查找属组为指定组(GID)的文件
-uid UserID
查找属主为指定的UID号的文件
-gid GroupID
查找属组为指定的GID号的文件
-nouser
查找没有属主的文件
-nogroup
查找没有属组的文件
(3)根据文件类型查找
-type TYPE
f:普通文件
d:目录文件
l:符号链接文件
s:套接字文件
b:块设备文件
c:字符设备文件
p:管道文件
(4)根据文件大小来查找
-size [文件大小]
常用单位:k,m,G
其中文件大小分为三种情况,可以将[0,+∞)的数轴分为三段,假设a正整数数字,可以将数轴分为三段,[0,a-1]、(a-1,a]、(a,+∞),在搜索时第一段可以用 -a 表示,第二段用 a 表示,第三段用 +a 表示
(5)根据时间戳来查找
以天为单位
-atime [时间段]
-mtime [时间段]
-ctime [时间段]
其中时间段的划分与根据文件大小的划分相同
以分钟为单位
-amin -mmin -cmin
(6)根据权限查找
-perm [/|-]MODE
MODE:精确权限匹配
/MODE:任何一类(u、g、o)对象的权限中只能以为匹配即可,是或的关系
-MODE:每一类对象都必须同时又有指定权限,与关系0表示不关注
(7)处理动作
默认的处理动作,显示至屏幕
-ls
类似于对查找到的文件执行"ls -l"命令
-delete
删除查找到的文件
-fls file
查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {}\
对查找到的每个文件执行由COMMAND指定的命令;对于每个文件执行命令之前,都会交互式的要求用户确认
(8)基于目录深度的查找 -maxdepth和-mindepth
find命令在使用时会遍历所有的子目录,我们可以使用-maxdepth和-mindepth选项来限制find命令遍历目录的深度。
大多数情况下,我们只需要在当前目录下进行查找,无需继续往下查找。对于这用情况,我们使用深度选项来限制find命令向下查找的深度。如果只允许find在当前目录中查找,深度可以设置为1;当需要向下两级是,深度设置为2;其他情况以此类推。
可以用-maxdepth指定最大深度,使用-mindepth指定最小深度
PS:-maxdepth和-mindepth应该作为find的第三个参数出项。如果作为第四个参数或者之后的参数,就可能影响find的效率,因为它不得不进行一些不必要的检查。例如,如果-maxdepth作为第四个参数,-type作为第三个参数,find首先会找出符合-type的所有文件,然后在所有匹配的文件中再找出符合指定深度的那些。但是如果倒过来,目录深度作为第三个参数,-type作为第四个参数,那么find就能够在找到的所有符合指定深度的文件后,再检查这些文件类型,这才是最有效的搜索之道
原创文章,作者:black_fish,如若转载,请注明出处:http://www.178linux.com/34585