grep、egrep、fgrep这些指令称为文本查找,即在给定的文本中找出匹配的内容。
而文件查找则是查找系统中的指定的文件是否存在,这些指令有locate和find。
locate:非实时查找,模糊匹配,根据数据库的内容进行搜索,搜索速度较快。
如果要生成或更新locate所使用的数据库的话,可以用updatedb这个指令。
find:是实时、精确查找,支持众多的条件,使用范围较广。
find语法格式: find 查找路径 查找标准 查找到以后的处理动作 说明: 查找路径:默认为当前目录。 查找标准:默认为制定路径下的所有文件。 处理动作:默认为显示。
示例1:
[root@Server3 tmp]# find . ./.esd-0 ./.esd-0/socket ./.ICE-unix [root@Server3 tmp]#
匹配标准:
-name ‘filename‘:根据文件名查找,精确查找。区分大小写。
-iname ‘filename‘:文件名匹配不区分大小写。
文件名通配符:
*:匹配任意长度的任意字符。
?:匹配任意一个字符。
[]:匹配括号中的任意一个字符。
示例2:
[root@Server3 tmp]# find /etc -name passwd
/etc/pam.d/passwd
/etc/passwd
[root@Server3 tmp]#
示例3:
[root@Server3 tmp]# find /etc -name ‘*shadow‘
/etc/gshadow
/etc/shadow
[root@Server3 tmp]#
-user:根据文件的拥有者进行查找。
-group:根据文件的属组进行查找。
-uid:根据uid查找。
-gid:根据gid查找。
-nouser:查找没有属主的文件。
-nogroup:查找没有属组的文件。
示例4:
[root@Server3 tmp]# find /home -user frame
/home/frame
/home/frame/.bash_logout
/home/frame/.viminfo
/home/frame/.bash_profile
/home/frame/.bashrc
/home/frame/.bash_history
/home/frame/.mozilla
/home/frame/.mozilla/plugins
/home/frame/.mozilla/extensions
/home/frame/.gnome2
[root@Server3 tmp]#
示例5:
[root@Server3 tmp]# find /home -uid 500
/home/xguest
/home/xguest/.bash_logout
/home/xguest/.bash_profile
/home/xguest/.bashrc
/home/xguest/.bash_history
/home/xguest/.mozilla
/home/xguest/.mozilla/plugins
/home/xguest/.mozilla/extensions
/home/xguest/.gnome2
[root@Server3 tmp]#
-type:根据文件类型查找。
f:普通文件
d:目录
b:块设备文件
c:字符设备文件
s:socket文件
p:pipe管道文件
l:链接文件
示例6:
[root@Server3 keepalived-1.1.17]# find /dev -type s
/dev/log
[root@Server3 keepalived-1.1.17]# ls -l /dev/log
srw-rw-rw- 1 root root 0 Jul 12 14:52 /dev/log
[root@Server3 keepalived-1.1.17]#
-size [[+-]nk|M|G]:根据文件大小查找。如果没有跟上大小,则默认单位为字节。+:表示大于指定的单位,-:表示小于指定大小的文件。
示例7:
[root@Server3 keepalived-1.1.17]# find / -size +1G -ls
534397 3593220 -rw-r--r-- 1 root root 3679453184 May 11 15:36 /opt/rhel6.3x64.iso
[root@Server3 keepalived-1.1.17]#
组合条件:
-a:与
-o:或
-not:非
如果指定了多个找到文件,但是没有指定组合条件,则默认为-a。
示例8:
[root@Server3 ~]# find /home -type d -a -user frame
/home/frame
/home/frame/.mozilla
/home/frame/.mozilla/plugins
/home/frame/.mozilla/extensions
/home/frame/.gnome2
[root@Server3 ~]# find /home -type d -user frame
/home/frame
/home/frame/.mozilla
/home/frame/.mozilla/plugins
/home/frame/.mozilla/extensions
/home/frame/.gnome2
[root@Server3 ~]#
-mtime [[+-]n]:修改时间,文件内容被修改
-ctime [[+-]n]:改变时间,文件属性被修改
-atime [[+-]n]:访问时间,文件被查看
上述n为天数。
-mmin [[+-]n]
-cmin [[+-]n]
-amin [[+-]n]
上述n表示的是分钟。
+n for greater than n
-n for less than n
n for exactly n
说明:如果时间为+5,则表示5天/分钟前。如果为-5,则表示5天/分钟内,如果为5,则表示第五天/分钟这一天。
-perm MODE:根据文件的权限匹配。确切的匹配权限,必须为指定的权限。
-perm -MODE:mode中的所有权限位都必须要设置才满足条件。
-perm /MODE:mode中的任何一个权限位被设置都满足条件。
find的动作
-print:默认的动作。
-ls:类似于ls -l的形式显示每一个文件的详细信息。
-ok COMMAND {} \; :要执行的动作,和-exec一样的。{}表示引用找到的文件。\;结束符,为固定格式。
-exec COMMAND {} \; :要执行的动作。
示例:
[root@Server3 tmp]# find ./ -perm 640 -ls
541403 0 -rw-r----- 1 root root 0 Jul 12 16:00 ./a
[root@Server3 tmp]#
说明:第一个为inode号(541403)。第二个(0)为文件的大小。剩下的就和ls -l一样了。
[root@Server3 tmp]# find ./ -perm 640 -ok chmod 644 {} \;
< chmod ... ./a > ? y
[root@Server3 tmp]# ls -l a
-rw-r--r-- 1 root root 0 Jul 12 16:00 a
[root@Server3 tmp]#
[root@Server3 tmp]# ls -l a
-rw-r----- 1 root root 0 Jul 12 16:00 a
[root@Server3 tmp]# find ./ -perm 640 -exec chmod 644 {} \;
[root@Server3 tmp]# ls -l a
-rw-r--r-- 1 root root 0 Jul 12 16:00 a
[root@Server3 tmp]#
说明:-ok和-exec的区别是,-ok需要对每一个动作进行确认,-exec不需要确认。本文出自 “HeZhang” 博客,请务必保留此出处http://hezhang.blog.51cto.com/1347601/1437511
原文地址:http://hezhang.blog.51cto.com/1347601/1437511