Linux文件查找

作者: Juha | 来源:发表于2020-06-09 14:19 被阅读0次
    文件查找
        locate,find
    
        在文件系统上查找符合条件的文件;
    
              实现工具:locate,find
    
      locate:
          依赖于实现构建好的索引库;
                系统自动实现【定时任务】;
                手动更新数据库(updatedb);
          工作特性:
              查找速度快;
              模糊查找;
              非实时查找。
    
        使用yum安装locate : yum install mlocate
        locate [OPTION]... PATTERN...
          -b 仅仅匹配基名
          -c count 统计出符合条件的个数
          -r BRE基于基本正则表达式
    
        注意:索引构建过程,即updatedb需要遍历整个根文件系统,机器消耗资源
    
      find:
          实时查找工具,通过便利指定其实路径下的文件系统层级结构完成文件查找;
    
          工作特性:
              查找速度略慢;
              精确查找;
              实时查找。
    
           用法:
                find [OPTIONS] [查找起始路径] [查找条件] [处理动作]
    
                  查找起始路径:指定具体搜索目标起始路径,默认为当前目录;
                  查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等标准进行,默认为找出指定路径下的所有文件。
                  处理动作:对符合查找条件的文件做出的操作,例如删除等操作,默认为输出至标准输出。可以使用ls等命令。
    
      查找条件:
        表达式:选项和测试组成
    
           测试:【结果通常为布尔型(false,true)】
                 根据文件名查找:
                        -name "pattern"
                        -iname "pattern" 不区分大小写
                              支持glob风格的通配符 *,?,[],[^]
                        -regex pattern 基于正则表达式模式查找文件,匹配的是整个路径,而不是文件名【没弄明白,一般不用】
    
                 根据文件的从属关系查找
                    -user username
                    -group groupname
    
                    -uid uid 查找属主指定的UID的所有文件
                    -gid GID 查找属组指定的GID的所有文件
    
                     -nouser  查找没有属主的文件
                    -nogroup  查找没有属组的文件
            没有属主和属组的文件是很危险的,需要定期查找系统中没有属主和属组的文件。
    
    根据文件的类型查找:
          -type TYPE:
            f:普通文件
           d:目录文件
            l:符号链接文件
           b:块设备文件
           c:字符设备文件
           p:管道文件
           s:套接字文件
    
     组合测试:
          与:-a 默认是与组合逻辑,两个条件都满足才输出
          或:-o 如果一个条件符合,则输出 shi
          非:-not或者-! 
            例如:find /tmp -not -user "juha" -ls 显示tmp目录下属主不是juha的所有文件
    
              !A -a !B = !(A -o B)
              !A -o !B = !(A -a B)
    
      注意,使用组合时,如需使用括号,则需使用转义符即\( 和\)
    
      根据文件的大小查找:
            -size [+|-] #unit
                常用单位:k,M,G
    
                  #unit:(#-1,#] 大于这个值减一,但是小于等于这个值
                  -#unit:[0,#-1] 小于等于这个值减一
                  +#unit:(#,∞) 大于这个值
    
      根据时间戳查找:
                a access,c change,m modify
                以天为单位:
                    -atime [+|-]#
                          #:[#,#-1]过去#天一天之内
                          -#:(#,0] 距离现在#天之内
                          +#(-∞,#-1] #天之前
                    -mtime 
                    -ctime
                以分钟为单位
                    -amin
                    -mtime
                    -ctime 
    
        根据权限查找:
              -perm [/|-] mode
                  mode: 精确权限匹配 例如777
                  / mode:任何一类用用户(u,g,0)的任何一位(rwx)符合条件即满足  ,9位权限或关系
                    例如 find /tmp /111 代表查找至少一个组有执行权限的,find /tmp /001查找其他组中有执行权限的文件
                  -mode:每一类用户(u,g,o)中的每一个位同时符合条件即可,9位权限是与关系
                    例如,find /tmp -111 代表查找三类组都应该有执行权限,find /tmp -011查找其他组且属组中中有执行权限的文件
    
    
      处理 动作(对最后一个输出的结果生效,如果是或,注意使用括号):
          -print:输出至标准输出,默认的动作;
          -ls:类似于对查找到的文件执行ls -l命令,输出文件的详细信息;
          -delete 删除查找到的文件
          -fls /path/to/file 把查找到的所有文件的长格式信息保存至指定文件中。危险,不建议做。
          -ok COMMAND {} \; 对查找到的每个文件执行COMMAND命令操作,{}的作用是引用查找到的文件名 的,但是改了多少个文件就要手动确认多少次。  
              例如:find ./ -nogroup -ok chown root:root {}\; 表示对查找到的没有属组的文件执行改变属主和属组为root。
          -exec COMMAND {}\;对查找到的每个文件执行COMMAND命令操作,无需确认操作。
              例如:find ./ -perm /002 -exec mv {} {}.danger \;表示把当前目录下的其他组有写权限的文件更名为原文件名后加.danger。
    
        注意:find传递查找 的 文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令;但是有些命令不能接受过长的参数,此时命令执行会失败,可通过另一种方式避免此问题:
              find | xargs COMMAND
    

    相关文章

      网友评论

        本文标题:Linux文件查找

        本文链接:https://www.haomeiwen.com/subject/dfmstktx.html