前面我们已经到过正则表达式的grep工具,接下来让我们了解另一个个文本查找搜索工具find

一 find特性

  与grep的模糊查找不同

  1 find 是实时查找

  2 find 查找的速度慢

  3 find 可以做到精确匹配,自然比较耗费资源,不要大范围的find

二  命令格式

find [options] [查找路径][查找条件][处理]

           查找路径:默认为当前目录

           查找条件:默认为查找指定路径下的所有文件

           处理动作:默认为显示到显示器 -print

   详细阐述

     1 查找条件

       1.1  -name "文件名称"

             ###查找 /etc目录下 所有以shadow开头的文件 支持字符串通配符

       1.2   -iname "文件名称":忽略大小写查找

             例如  #find /etc/ -name "A*"

              ###查找/etc目录下 所有以小写字母a开头的文件,忽略大小写

        1.3  -user UserName:根据属主查找

            linux用户创建updatedb.conf文件

            ###查找以属主为linux的文件

         1.3.1 -uid 用户ID号:根据用户ID查找

        1.4 -group GroupName:根据属组查找

              ###查找属组为root的所有文件

           1.4.1 -gid 基本组号:根据属组ID查找

               ###查找gid为0的用户的/bin目录下的所有文件  gid为0的用户为root用户

           1.5 -nouser:根据没有属主的条件查找

               -nogroup:根据没有属组的条件查找

             删除用户后,再次查看/tmp目录下该用户创建的文件属性

              #ll /tmp

               你会发现该文件的属主属组为502 而非linux用户

               此时我们通过 -nouser ;-nogroup来查找

              -nouser -nogroup 的用途:当一个用户被删除后,有其残留的文件,此时可以这样                                         查找并删除

            1.6 一些强大的组合条件

-a :“与” 同时满足

            ##查找不属于用户root 也不属于linux用户的文件

           等同于find /tmp -not \( -user linux -a -user root \)

-o : 或,有一个满足

             ###以上命令表示 :在/tmp目录中查找出 属主不是linux的文件 或者查找出名字不是      以.txt结尾的文件。

            (也可以理解为查找出除 属主为linux或者名字是以.txt结尾的文件 以外的文件)

        =find /tmp -not \( -user linux -o -name "*.txt")\

      您看是不是一样 哈哈,仔细琢磨下,我刚琢磨过来

-not,!:非,取反 相反则满足

  2  -type 根据文件类型查找

              f 普通文件    #find /tmp -type f  查找tmp目录下的普通文件

              b 块设备文件

              s 套子节

              d 目录文件

              p 管道符

              l 链接符

   3 -size 根据文件大小查找

         -size [+-] #Unit

        #Unit 是单位:k,M,g  --kb,MB,GB

        所以查找的是属于一个单位该单位的范围内的--是不是比较绕?继续看

       --- 如果没有[+-]则默认的代表=

          例如 2M 表示大于1M小于等于2M 的意思

           查找出3kb< #《4kb的文件

    4 根据时间戳查找(比较麻烦自习看哦)

           -a  --access time 访问时间

           -m  --modify time 修改时间

           -c  --change time 改变时间

       4.1 以天为单位 time

          格式:以访问时间为例

                  -atime [+|-]#  

                 + 表示(#+1)天之外被访问过

                 - 表示#天之内被访问过

                 无符号 表示在 (#+1) > x >=#天的时间段被访问过;

          上图

           查看/var/log 一天外被修改过的文件 注意 -mtime +1 的意思,不明白继续返回去看

          4.1.1  以分钟为单位 min

                   -amin

                   -mmin

                   -cmin

            用法同以天为单位time

       5 根据权限查找

          格式:-perm [+|-] MODE  

         MODE : 没有+-的时候 表示= 精确匹配

         +MODE: 任何一类用户的任何一位权限匹配;常用于查找某类用户的某特定权限是否存在;

         -MODE:  每类用户的指定要检查的权限为都匹配

        例如:find /etc/ -not -perm +222

            先来看 -perm +222

            表示:任何一类用户的任何一位权限匹配就匹配 -->属主、属组、others 其中任何一                    个匹配2(写的权限)就匹配查找

                 -not -perm +222

            表示:每类用户的指定要检查的权限都匹配才匹配-->属主、属组、others 都匹配                        2(写的权限)才匹配查找

           那么find /etc/ -not -perm -222呢?

                表示 用户、用户组、others的任何一个没有写权限的 就匹配查找

        6 处理动作

            -print:打印在标准输出上

             -ls    以长格式输出各文件信息

            -exec  COMMAND \;  对查找到的文件执行指定的命令

             -ok    COMMAND \; 交互式的-exec

             | xargs COMMAND

           注意:find把查找到的所有文件一次性的传递给-exec所指定的命令

        # find /tmp -perm -003 -type f -exec ls -ld {} \;  

        查找出/tmp目录下 所有符合其他用户有读且执行权限 的普通文件,并调用 ls -ld 命令            执行出来

           简直是太绕了~~~

PS:望大神多提意见,错误的地方请指出。我很菜但是我很努力.