一:文件查找:分类:find和locate特性和区别。

find和locate。主要区别:
find:实时查找,速度慢。
精确匹配
消耗资源
locate:(updatedb)手动生成数据库。
依赖于数据库。
非实时精确查找,结果非精确。
查找速度快。
模糊查找。

这里主要是讲find的查找。

二:find主要作用

可以遍历当前目录甚至于整个文件系统来查找某些文件或目录。还可以通过匹配符进行详细查找。

三:find格式和查找的一些类型。

find [options] [查找位置\路径] [查找标准\条件][处理动作]
查找路径:省略则作为当前目录查找。
查找条件:没有指定标准就查找指定路径下的所有文件。
处理动作:默认为显示动作。print。

四:查找条件分类和图文命令详解。

1)名称查找:

-name “文件名称”,支持使用globbing,文件名统配机制。
-iname:不区分字符大小写。
find /etc -name "passwd"根据名称查找passwd名字。

find命令详解_locate

find命令详解_find命令详解_02

2)根据属主和属组查找。

-user UserName:属主查找。
-group GroupName:属组查找。

find命令详解_locate_03

3)根据UID和GID查找。

根据uid和gid的原因主要是防止用户被删除了还存在家目录,这样可以根据UID和GID查出。
find /tmp -uid 500
find /tmp -gid 500

4)查找没有属主的文件。

-nouser:查找没有属主的文件。
-nogroup:查找没有属组的文件。
find /tmp -nouser
find /tmp -nogroup

5)组合条件。

-a:与,同时满足。
-o:或,满足一个。
-not,!:非,取反的。

find命令详解_find命令详解_04

find /tmp -user hadoop -a -not -name "*.txt"=》意为查找用户为hadoop非.txt结尾的文件。

6)根据类型查找。

-type:
f:普通文件。
d:目录。
b:块设备。
c:字符设备。
l:符号链接。
p:命名管道。
s:套接字。

find命令详解_find命令详解_05

7)根据文件大小查找。

-size [+|-]#Unit
例如:-size +2MB大于2MB,-2MB小于,2MB等于。(精确匹配)。

find命令详解_find命令详解_06

find命令详解_find命令详解_07

find命令详解_locate_08

8)根据时间戳查找。

以天为单位(time)
-atime:[+|-]#访问时间。
-mtime:修改时间。
-ctime:改变时间。

find命令详解_locate_09

以分钟为单位(min)。

-amin:访问。
-mmin:修改。
-cmin:改变。

find /tmp/ -mmin -5  =》查找tmp下5分钟之内访问的文件。

9)根据权限查找。

-perm [+|-]MODE(权限)
MODE:表示精确匹配
+MODE:任何一类用户任何一位权限匹配即可。
-MODE:每类用户的任何一位都匹配。

find命令详解_locate_10

find命令详解_locate_11find命令详解_find命令详解_12

五:处理动作。

1)-print:打印在标准输出上。(默认)
2)ls:以长格式输出各文件信息。
3)-exec COMMAND \;:对查找到的文件执行指定的命令。
4)-ok COMMAND \;:交互式的-exec。

查找最近修改1天内和大于1天的文件。通过-ok和-exec各个实现。

find命令详解_locate_13

find命令详解_find命令详解_14

-exec特殊用法。

[root@station106 tmp]# find /tmp -iname "*.sh"
/tmp/sh3.sh
/tmp/etc/bash_completion.d/gvfs-bash-completion.sh
/tmp/etc/dhcp/dhclient.d/ntp.sh
/tmp/etc/profile.d/cvs.sh
/tmp/etc/profile.d/qt.sh
/tmp/etc/profile.d/lang.sh
/tmp/etc/profile.d/vim.sh
/tmp/etc/profile.d/which2.sh
/tmp/etc/profile.d/gnome-ssh-askpass.sh
/tmp/etc/profile.d/glib2.sh
/tmp/etc/profile.d/udisks-bash-completion.sh
/tmp/etc/profile.d/colorls.sh
/tmp/etc/profile.d/less.sh
/tmp/sh2.sh
/tmp/sh.sh
/tmp/sh1.sh
[root@station106 tmp]# find /tmp -iname "*.sh" -exec mv {} {}back \;
[root@station106 tmp]# find /tmp -iname "*.sh"
[root@station106 tmp]# find /tmp -iname "*.shback"
/tmp/sh1.shback
/tmp/etc/bash_completion.d/gvfs-bash-completion.shback
/tmp/etc/dhcp/dhclient.d/ntp.shback
/tmp/etc/profile.d/glib2.shback
/tmp/etc/profile.d/colorls.shback
/tmp/etc/profile.d/gnome-ssh-askpass.shback
/tmp/etc/profile.d/qt.shback
/tmp/etc/profile.d/cvs.shback
/tmp/etc/profile.d/less.shback
/tmp/etc/profile.d/udisks-bash-completion.shback
/tmp/etc/profile.d/vim.shback
/tmp/etc/profile.d/which2.shback
/tmp/etc/profile.d/lang.shback
/tmp/sh2.shback
/tmp/sh.shback
/tmp/sh3.shback
[root@station106 tmp]# find /tmp -iname "*.sh"
/tmp/sh3.sh
/tmp/etc/bash_completion.d/gvfs-bash-completion.sh
/tmp/etc/dhcp/dhclient.d/ntp.sh
/tmp/etc/profile.d/cvs.sh
/tmp/etc/profile.d/qt.sh
/tmp/etc/profile.d/lang.sh
/tmp/etc/profile.d/vim.sh
/tmp/etc/profile.d/which2.sh
/tmp/etc/profile.d/gnome-ssh-askpass.sh
/tmp/etc/profile.d/glib2.sh
/tmp/etc/profile.d/udisks-bash-completion.sh
/tmp/etc/profile.d/colorls.sh
/tmp/etc/profile.d/less.sh
/tmp/sh2.sh
/tmp/sh.sh
/tmp/sh1.sh
[root@station106 tmp]# find /tmp -iname "*.sh" -exec mv {} {}back \;
[root@station106 tmp]# find /tmp -iname "*.sh"
[root@station106 tmp]# find /tmp -iname "*.shback"
/tmp/sh1.shback
/tmp/etc/bash_completion.d/gvfs-bash-completion.shback
/tmp/etc/dhcp/dhclient.d/ntp.shback
/tmp/etc/profile.d/glib2.shback
/tmp/etc/profile.d/colorls.shback
/tmp/etc/profile.d/gnome-ssh-askpass.shback
/tmp/etc/profile.d/qt.shback
/tmp/etc/profile.d/cvs.shback
/tmp/etc/profile.d/less.shback
/tmp/etc/profile.d/udisks-bash-completion.shback
/tmp/etc/profile.d/vim.shback
/tmp/etc/profile.d/which2.shback
/tmp/etc/profile.d/lang.shback
/tmp/sh2.shback
/tmp/sh.shback
/tmp/sh3.shback

xargs特殊用法和-exec的区别之处。

find /tmp -iname "*.shback" | xargs chmod o-wx =》查到的内容直接能进行操作。

六:实例介绍。

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
3)查找/etc/目录最近一周内其内容被修改过的,且不属于root或hadoop的文件。
find /etc/ -mtime -7 -a -not -user root -a -not -user hadoop
4)查找当前系统上没有属主或属组,且最近一个月内曾被访问过的文件。
find / \( -nouser -o -nogroup \) -a -atime -30
5)查找/etc/目录下大于1M且类型为普通文件的所有文件;
find /etc/ -size +1M -a -type f
6)查找/etc/目录所有用户都没有写权限的文件。
find /etc/ -not -perm +222
所有都没有:相反:任何一个有
所有都有:相反:只要有一个没有。
7) 查找/etc/目录下任何用户有写权限的文件
find /etc/ -perm +222
8)查找/etc/目录下至少有一类用户没有写权限;
find /etc/ -not -perm -222
9)查找/etc/init.d/目录下,所有用户都有执行权限且其他用户有写权限的文件。
find /etc/init.d/ -perm -113

PS:

以上就是自己所能理解和总结的内容。由于能力有限,希望对各位有所帮助。如果疑问--》吐槽--》在评论——》指出不明白处--》然后给你解答--》解答后如有不明--》继续吐槽--》继续给你解答。