一:文件查找:分类:find和locate特性和区别。
find和locate。主要区别: find:实时查找,速度慢。 精确匹配 消耗资源 locate:(updatedb)手动生成数据库。 依赖于数据库。 非实时精确查找,结果非精确。 查找速度快。 模糊查找。
这里主要是讲find的查找。
二:find主要作用
可以遍历当前目录甚至于整个文件系统来查找某些文件或目录。还可以通过匹配符进行详细查找。
三:find格式和查找的一些类型。
find [options] [查找位置\路径] [查找标准\条件][处理动作] 查找路径:省略则作为当前目录查找。 查找条件:没有指定标准就查找指定路径下的所有文件。 处理动作:默认为显示动作。print。
四:查找条件分类和图文命令详解。
1)名称查找:
-name “文件名称”,支持使用globbing,文件名统配机制。 -iname:不区分字符大小写。 find /etc -name "passwd"根据名称查找passwd名字。
2)根据属主和属组查找。
-user UserName:属主查找。 -group GroupName:属组查找。
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 /tmp -user hadoop -a -not -name "*.txt"=》意为查找用户为hadoop非.txt结尾的文件。
6)根据类型查找。
-type: f:普通文件。 d:目录。 b:块设备。 c:字符设备。 l:符号链接。 p:命名管道。 s:套接字。
7)根据文件大小查找。
-size [+|-]#Unit 例如:-size +2MB大于2MB,-2MB小于,2MB等于。(精确匹配)。
8)根据时间戳查找。
以天为单位(time) -atime:[+|-]#访问时间。 -mtime:修改时间。 -ctime:改变时间。
以分钟为单位(min)。
-amin:访问。 -mmin:修改。 -cmin:改变。
find /tmp/ -mmin -5 =》查找tmp下5分钟之内访问的文件。
9)根据权限查找。
-perm [+|-]MODE(权限) MODE:表示精确匹配 +MODE:任何一类用户任何一位权限匹配即可。 -MODE:每类用户的任何一位都匹配。
五:处理动作。
1)-print:打印在标准输出上。(默认) 2)ls:以长格式输出各文件信息。 3)-exec COMMAND \;:对查找到的文件执行指定的命令。 4)-ok COMMAND \;:交互式的-exec。
查找最近修改1天内和大于1天的文件。通过-ok和-exec各个实现。
-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:
以上就是自己所能理解和总结的内容。由于能力有限,希望对各位有所帮助。如果疑问--》吐槽--》在评论——》指出不明白处--》然后给你解答--》解答后如有不明--》继续吐槽--》继续给你解答。