文件查找命令

文件查找命令

文件查找

  在文件系统上查找符合条件的文件一般有两个工具, 分别为locate, find

locate:

  依赖于实现构建好的索引库:

    系统自动实现

    手动更新数据库(updatedb)

  工作特性:

    查找速度快

    模糊查找

    非精确查找

    非实时查找

  参数:

    locate [OPTION]... PATTERN...

    -b:  基名查找

    -c:  统计出共有多少个符合条件的文件

    -r:  BRE

    updatedb这个操作非常占用系统资源

find:

  实时查找工具,  通过遍历指定起始路径下文件系统层级结构完成文件查找

  工作特性:

    查找速度略慢

    实时查找

    精确查找

  用法:

    find [OPTION] :  [查找路径] [查找条件] [处理动作]

      查找起始路径:  指定具体搜索目标起始路径,  默认为当前目录

      查找条件, 指定的查找标准,  可以根据文件名, 大小, 类型, 从属关系, 权限等等标准进行.默认找出指定路径下的所有文件

      处理动作:  对符合查找条件的文件的操作, 例如删除等操作, 默认为是输出到标准输出.

    查找条件:

      表达式:  选项和测试

      测试:

        1. 根据文件名查找

          -name  'pattern':  大小写敏感

          -iname 'pattern':  忽略大小的名字

            此处的规则时基于glob风格的通配符来查找的

            * ,  ?  []  [^]

          -regex  pattern  :  基于正则表达式来查找文件,  但是是基于整个文件路径来查找的, 而不是根据基名来查找的, 非常少用..

        2. 根据文件从属关系查找

          -user:  USERNAME  根据属主指定用户的所有文件

          -gourp:  GROUPNAME  根据属组来查找所有文件

          -uid  UID  根据属主指定uid的所有文件,  (因为用户可能被删除)  

          -gid  GID  查找属组指定的gid的所有文件

          -nouser:  查找没有属主的所有文件

          -nogroup  查找所有没有属组的文件

        3.  根据文件的类型查找

          -type TYPE

            f:  普通文件

            d:  目录文件

            l:  符号链接文件(符号链接方式)

            b:  块设备文件

            c:  字符设备文件

            p:  管道文件

            s:  套接字文件

        4.  组合测试

          与:  -a 默认

          或:  -o

          非:  -not

        5. 根据文件的大小查找:

          -size  [+|-] # UNIT

             常用单位:  k, M, G

             # UNIT:  (#-1, #] 只要换算后在这个里面的都算

             -# UNIT: [0, #-1]  小于# 的都是

             +# UNIT:  (#, oo)  大于# 的文件

        6.  根据时间戳来查找:

          时间都是相对于当前的时间往前计算的, 例如#3, 是指第2.xxx天前到3天前整的时间

          以天为单位

            -atime [+|-] 为单位,  访问时间

              #: [#, #-1)

              -#:  (#, 0]  表示#-1天到今天之前的

              +#:  [oo,  #),  例如#=3, 表示3天前到oo天以前

            -mtime:  修改时间

            -ctime:  创建时间

          以分钟为单位:

            -amin:  

            -mmin:

            -cmin:

       7. 根据权限查找:

         -perm  [/|-]mode

           mode:  精确权限匹配

           /mode:  任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件

              例如 find . -perm /222 -ls  表示查找至少有一类用户拥有写权限3类用户之间是并列关系, 只要有一个符合要求即可

           -mode: 每一类用户的每一位权限都符合条件,  与上面相反, 是 与关系

    处理动作      

      -print:  输出到标准输出

      -ls:  类似于对查找到的文件执行'ls -l'命令,  输出文件的详细信息

      -delete :  删除查找到的文件

      -fls  /PATH:  把查到的所有文件的长格式信息保存至指定文件中

      -ok  COMMAND {} \;   :对查找到的每个文件执行有COMMAND表示的命令. 交互式, 每次操作都要提示是否确认

      -exec  COMMAND {} \;  非交互式

     查找到的结果可能不支持管道, 这时候可以通过xargs命令来将参数传递给那些不支持管道的命令, 例如ls

小练习: 

  1. 查找/etc/init.d/ 目录下, 所有用户都有执行权限,  且其他用户拥有写权限的文件  find /etc/init.d/ -perm -111 -a -perm /002 -ls 

  2. 查找/etc/目录下,  至少有一类用户没有执行权限的文件   find /etc/ -not -perm -111 -ls 

     3.  查找当前系统上没有属主或属组, 且最近一周内未曾被访问过的文件或目录

     find / \( -nouser -o -nogroup \) -atime +7 \( -type f -o -type d \) -ls 

 

posted @ 2019-08-18 08:39  yscl  阅读(214)  评论(0)    收藏  举报