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

  

猜你喜欢

转载自www.cnblogs.com/yanshicheng/p/12323828.html