文件查找:根据文件的各种属性去找到相对应文件
文本搜索:grep, egrep, fgrep
文件查找:locate, find
实时查找:遍历所有文件进行条件匹配
非实时查找:根据索引查找
locate: 非实时查找
依赖于索引,而索引构建相当占用资源;索引的创建是在系统空闲时由系统自动进行(每天任务);手动进行使用updatedb命令;
查找速度快
非精准查找
模糊查找
find: 实时查找
精准查找
精确查找
速度慢
find [option]... [查找路径] [查找条件] [处理动作]
查找路径:默认为当前目录
查找条件:默认为指定路径下的所有文件
处理动作:默认为显示至屏幕
查找条件:
-name "文件名称":支持使用globbing字符
*:
?:
[]:
[^]:
-iname "文件名称":查找时忽略字符大小写
-user USERNAME: 根据文件的属主查找
-group GRPNAME: 根据文件的属组查找
-uid UID
-gid GID
-nouser: 查找没有属主的文件
-nogroup: 查找没有属组的文件
组合条件查找:
与:-a, 同时满足
或:-o, 满足一个即可
非:-not, !,条件取反
-not A -a -not B = -not (A -o B)
-not A -o -not B = -not (A -a B)
例子:-not \( -iname "*r* -o -user gentoo \)
-type TYPE: 根据文件类型查找
f: 普通文件
d: 目录文件
l: 符号链接
b: 块设备
c: 字符设备
s: 套接字文件
p: 命名管道
-size [+|-]#UNIT
常用单位: k, M, G
#UNIT: #-1 < x <= #
-#UNIT: x <= #-1
+#UNIT: x > #
根据时间戳查找:
以“天”为单位
-atime [+|-]#
+#:x >= #+1
-#:x < #
#: # <= x < #+1
-mtime
-ctime
以“分钟”为单位
-amin
-mmin
-cmin
根据权限查找:
-perm [+|-]MODE
MODE: 与MODE精确匹配
find ./ -perm 644
+MODE: 任何一类用户的权限只要能包含对其指定的任何一位权限即可;以属主为例,
find ./ -perm +222
-MODE:每类用户指定的检查权限都匹配:
为三类用户所有指定的检查权限都能够被包含
find ./ -perm -222
处理动作:
-print: 默认处理动作,显示
-ls:类似于ls -l
-exec COMMAND {} \;
-ok COMMAND {} \;
find: 一次性查找符合条件的所有文件,并一同传递给给-exec或-ok后面指定的命令;但,有些命令不能接受过长的参数;此时使用另一种方式
find | xargs COMMAND
总结:find [查找路径] [查找条件] [处理动作]
查找条件:
-name, -iname, -user, -group, -uid, -gid, -nouser, -nogroup, -type, -size, -atime, -mtime, -ctime, -amin, -mmin, -cmin, -perm
组合:-a, -o, -not
处理动作:
练习:
1、查找/var/目录属主为root且属组为mail的所有文件;
# find /var -user root -a -group mail
2、查找/usr目录下不属于root、bin或hadoop的所用文件;
find /usr -not -user root -a -not -user bin -a -not -user hadoop
find /usr -not \(-user root -o -user bin -o -user hadoop\)
3、查找/etc/目录下最近一周内其内容修改过的,且不属于root且不属于hadoop的文件;
find /etc -mtime -7 -a -not \(-user root -o -user hadoop\)
4、查找当前系统上没有属主或属组,且最近1个月内曾被访问过的文件;
find / \(-nouser -o -nogroup\) -a -atime -30
5、查找/etc/目录下大于1M且类型为普通文件的所有文件;
find /etc -size +1M -type f
6、查找/etc/目录所有用户都没有写权限的文件;
find /etc/ -not -perm +222
7、查找/etc/目录下至少有一类用户没有写权限;
find /etc/ -not -perm -222
8、查找/etc/init.d/目录下,所有用户都有执行权限且其它用户有写权限的文件;
find /etc/init.d/ -perm -113
find补充材料(摘自互联网):
find与xargs
在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现 溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;
而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。