• Linux文件查找


    locate

    查找系统上预先建立的文件索引数据库 /var/lib/mlocate/mlocate.db 

    locate查找事先依赖于先构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务),或管理员手动更新数据库(updatedb)

    索引构建过程需要遍历整个根文件系统,极消耗资源.

    工作特点:

    1. 非实时查找(数据库查找:locate)
    2. 查找速度快
    3. 模糊查找
    4. 搜索的是文件全路径,不仅仅是文件名
    5. 可能只所搜用户具备读取和执行权限的目录

    locate使用方法

    安装locate命令
    yum install mlocate
    
    初始化
    sudo updatedb

    选项

    选项 说明
    -i 忽略大小写
    -n 只列出符合条件的前几个
    -r 支持正则表达式

    find

    实施查找工具,通过遍历指定路径完成文件查找

    特性

    1. 查找速度略慢
    2. 精确查找
    3. 实时查找
    4. 可能只搜索用户具备读取和执行权限的目录

    find用法

    基本语法: find [OPTION] .... [查找路径] [查找条件] [处理动作] 

    • 查找路径: 指定一个路径当做本次搜索的位置
    • 查找条件: 指定查找标准可为:文件名,大小,类型权限等.
    • 处理动作: 对查找到符合条件的文件做什么操作,默认输出到屏幕.

    查找条件

    1.搜索层级

    -maxdepth level     最大搜索目录深度,指定目录为第1级 
    -mindepth level     最小搜索目录深度

    2. 根据文件名和inode查找

    -name "文件名称"         根据文件名查找支持使用glob通配符
    -iname "文件名称"        不区分字母大小写
    -inum n                 按inode号查找
    -samefile name          相同inode号的文件
    -links n                链接数为n的文件
    -regex "PATTERN"        以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称

    3. 根据属主,属组查找

    -user USERNAME    查找属主为指定用户(UID)的文件
    -group GRPNAME    查找属组为指定组(GID)的文件
    -uid UserID            查找属主为指定的UID号的文件
    -gid GroupID          查找属组为指定的GID号的文件
    -nouser                  查找没有属主的文件
    -nogroup                查找没有属组的文件

    4. 根据文件类型查找

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

    5. 根据文件大小

    -size [+|-]#UNIT 常用单位:k, M, G,c(byte) 
        例如:-size 2k 匹配取值为(1k~2k)
             -size -5k 取值范围为(0-4k包括5k)
             -size +5k 取值范围为(5k+ 不包括5k)

    6. 根据时间戳查找

    以"天"为单位
    -atime [+|-]#   读取时间
        #:  [#,#+1]次 
        +#: [#天以上]
        -#: [0,#不包括#天]
    -mtime    修改时间
    -ctime    状态更改时间
    
    以"分钟"为单位
        -amin
        -mmin
        -cmin

    7. 根绝文件权限查找

    -perm #
        例如: -perm 600
              /600   或者模糊匹配
              -602   other权限位有读权限才会匹配

    处理动作

    -print     打印输出默认
    -ls        显示详细信息
    -delete    删除匹配的文件
    -fls file  匹配到的文件重定向到指定的文件中
    -ok  COMMAND {} ;    对每个文件指定COMMAND命令,每个文件需要交互用户确认
    -exec  COMMAND {} ;  类似-ok,不需要用户交互确认.

    组合条件

    与:-a
    或:-o
    非:-not, !

    本章练习题

    1. 使用locate忽略大小写查询 password文件
    
    2. 使用find查询/下所有没有属主属组的文件
    
    3. 使用find查询属主为root 属组不为test 任意一个权限位包含777的链接文件
     
    4. 使用find 找到 hh1-10 文件并删除
    
    5. 使用find 找到/var/log/ 下面类型为普通文件,七天之前的所有文件按照修改日期查询
    

    答案

    1. 使用locate忽略大小写查询 password文件
    locate -i password
    
    2. 使用find查询/下所有没有属主属组的文件
    find / -nouser -nogroup
    
    3. 使用find查询属主为root 属组不为test 任意一个权限位包含777的链接文件
     find / -user root -not -group test -perm /777 -type l
     
    4. 使用find 找到 hh1-10 文件并删除
    find / -iname "hh*" -exec rm -rf {} ;
    
    5. 使用find 找到/var/log/ 下面类型为普通文件,七天之前的所有文件按照修改日期查询
    find /var/log/ -type f -mtime +7
    

      

  • 相关阅读:
    JavaScript传递参数方法
    IScroll5不能滑到最底端的解决办法
    VS Less Compiler插件使用
    Sql查询某个字段是否包含小写字母
    试用VS2019正式版
    Ext.net MessageBox提示
    VS打开项目 提示Asp.net4.0未在web服务器上注册的解决方案
    罗技M185鼠标飘
    Ext.Net的一例Ext Undefined解决办法
    JGUI源码:DataTable固定列样式(20)
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/12323828.html
Copyright © 2020-2023  润新知