linux学习笔记6-查找功能

locate 功能弱,速度快

find 功能强,速度慢

locate 【路径】【关键字】

实际上locate命令,是在系统记录文件名的数据库中查找,即/var/lib/mlocate数据库,并不是遍历硬盘来查找,存在以下的问题:刚创建的文件查不到;已经被删掉的文件被找到,原因是记录文件名的数据库每天更新一次,但是可以手动更新 使用updatedb命令

find

find 【查找范围】【查找条件】【动作】

【查找范围】:路径

【查找条件】:文件大小、名字、类型

【动作】:对查找文件做进一步处理

eg:

  • 根据文件名查找:find 【路径】 -name 【精确文件名】; find / -name passwd
  • 根据文件类型查找:find 【路径】 -type【文件类型】;find / -type d
  • d:目录文件
  • f:普通文件
  • c:字符设备问价
  • b:块设备文件
  • l:符号链接文件
  • s:接口文件类型,网络数据连接中通过接口来监听客户端
  • 根据时间属性查找:
  • -mtime 和文件内容发生改变时间相关
  • find /tmp -mtime -3 -ls 查找tmp目录,往回数3天之内,内容发生改变的文件,ls列出时间戳属性方便查看
  • find /tmp -mtime +7 -ls 查找tmp目录,7天之前,内容发生改变文件
  • find /tmp -mtime 4 -ls 查找tmp目录,4天前的那一天,内容发生改变的文件
  • 其中+n代表n天之前,n代表往回数第n天的当天,-n代表往回数n天之内
  • -mmin(用法类似-mtime)
  • find /home/stu -mmin -60 -ls 查找stu目录中,前一个小时内容发生改变的文件
  • find /home/stu -mmin +120 -ls 查找stu目录中,前2个小时之前内容发生改变的文件
  • -ctime 和文件属性修改时间相关
  • -cmin 和文件属性修改时间相关
  • -atime 和文件被读取和执行的时间有关
  • -amin和文件被读取和执行的时间有关
  • 根据文件大小进行查找
  • -size
  • find /tmp -size -3k -ls 查找tmp目录下比3K字节小的文件
  • find /tmp -size +100c -ls 查找tmp目录下比100字节大的文件
  • find /tmp -size 10M -ls 查找tmp目录下10M大小文件
  • -size -1c 1字节
  • -size -1k 1024字节
  • -size -1M 1024k字节
  • -size -1G 1024M字节
  • +代表大于,-代表小于,无符号代表等于
  • 根据用户或者从属用户组的条件来查找
  • find /tmp -user root -ls 查找tmp目录下root用户文件
  • find /tmp -uid 500 -ls 查找tmp目录下uid为500的用户文件,UID为500的在linux中是普通用户
  • find /tmp -group stu -ls 查找tmp目录下从属于stu用户组的文件
  • find /tmp -gid 0 -ls 查找tmp目录下从属于gid为0的用户组文件
  • 根据文件权限查找
  • find /tmp -perm 754 -ls查找tmp目录下权限为754的文件
  • 联合条件查找
  • find -a 与
  • find -o 或
  • find ! 非
  • 联合条件需要把所有条件都用括号括起来,左右括号需要跟反斜杠\转义符,前后括号加上转义符部分的前后分别都要用空格隔开
eg:find /tmp \( -size -10M -a -size +5M -atime -10 \) -ls
  • 查找后的动作选项 -exec
find /tmp \( -size +1k -a -size -1M -a -mmin -30 -a -type f \) -exec rm -rf{} \;

其中 rm -rf 代表具体的删除动作,{} 代表前面查找到的内容,;在bash中有特殊含义,需要 \ 转义

find /tmp \( -mmin -10 -a -type d \) -ls -exec tar -cf {}.tar {} \;
  • 查找后的动作选项 -OK
  • 对动作会逐个提示,其他作用和 -exec一致,在删除文件时可以考虑使用

【从善如登,从恶如崩】