08_Linux文件查找技巧:locate、find 和 grep 命令详解

系列文章导航:01_Linux基础操作CentOS7学习笔记-CSDN博客


在Linux系统中,文件查找是一项常见的任务。本文将详细介绍三种强大的文件查找命令:locatefindgrep,以及它们的使用场景和参数。

1. locate命令

locate命令的功能是用于快速查找文件或目录。与find命令进行全局搜索不同,locate命令是基于了数据文件(/var/lib/mlocate/mlocate.db) 进行的定点查找,由于缩小了搜索范围,因此快速快很多。

​ Linux系统需定期执行下updatedb命令对数据库文件进行更新,然后再使用locate命令进行查找,这样才会更加准确。

优点:基于数据库查询,效率非常高
缺点:查询时要确保数据库是最新的,否则查找可能不正确

第一安装时,updatedb更新生成数据文件 /var/lib/mlocate/mlocate.db
/etc/cron.daily/mlocate.cron --根据任务计划每天刷新数据库 
注意:/tmp目录不做为updatedb数据库记录范围

安装与更新:

yum install -y mlocate
updatedb

语法格式:

locate [参数] 文件名

常用参数:

  • -b 仅匹配文件名
  • -c 不输出文件名
  • -d 设置数据库所在目录
  • -i 忽略大小写
  • -l 限制最大查找数量
  • -q 静默执行模式
  • -r 使用正则表达式
  • -S 显示数据库的统计信息
  • -w 匹配完整的文件路径
  • --help 显示帮助信息
  • --version 显示版本信息

示例:
搜索带有指定关键词的文件:

[root@lianghui ~]# updatedb
[root@lianghui ~]# locate network
/dev/network_latency
/dev/network_throughput
………………省略部分输出信息………………

在指定的目录下,搜索带有指定关键词的文件:

[root@lianghui ~]#  locate /etc/network
/etc/networks

locate “lesson” ----查找文件包含 lesson字符串的

# locate -r   'lessonoo.*'    ( -r参数支持用正则通配符)
# locate -r   "^/var/log"     ---   '^'  以xx开头  ,查找 以 /var/log开头的所有内容
# locate -r  '\.iso$'      找以'.iso'结尾的文件  在正则‘.’表示任意一个字符,‘\’ 转义为 普通的 '.' 字符

2. grep命令

grep命令用于搜索文件中的文本模式。它支持正则表达式,可以根据用户的需求灵活地进行搜索。与之容易混淆的是egrep命令和fgrep命令。如果把grep命令当作是标准搜索命令,那么egrep则是扩展搜索命令,等价于grep -E命令,支持扩展的正则表达式。而fgrep则是快速搜索命令,等价于grep -F命令,不支持正则表达式,直接按照字符串内容进行匹配。

语法格式:

grep [参数] 文件名

常用参数:

  • -b 显示匹配行距文件头部的偏移量
  • -c 只显示匹配的行数
  • -E 支持扩展正则表达式
  • -F 匹配固定字符串的内容
  • -h 搜索多文件时不显示文件名
  • -i 忽略关键词大小写
  • -l 只显示符合匹配条件的文件名
  • -n 显示所有匹配行及其行号
  • -o 显示匹配词距文件头部的偏移量
  • -q 静默执行模式
  • -r 递归搜索模式
  • -s 不显示没有匹配文本的错误信息
  • -v 反选,显示不包含匹配文本的所有行
  • -w 精准匹配整词
  • -x 精准匹配整行

示例:

grep "root" /etc/passwd                # 在passwd文件中过滤包含关键字"root"的行
grep -i "root" /etc/passwd             # 忽略大小写匹配关键字"root"
grep -n -i "root" /etc/passwd          # 忽略大小写匹配关键字"root"并显示行号
grep -v "root" /etc/passwd             # 反选,仅显示不包含关键字"root"的行
grep -v '^$' /etc/passwd               # 过滤空行
grep '^root' /etc/passwd               # 过滤以"root"开头的行
grep 'bash$' /etc/passwd               # 过滤以"bash"结尾的行
grep -w "^root" /etc/passwd            # 精确匹配以"root"开头的行
grep -vE "^#|^$" /etc/ssh/sshd_config  # 过滤掉以"#"开头或空行的内容
grep -Rl "pthread_create" /usr/include/  # 在/usr/include目录下查找包含"pthread_create"的文件
grep -Rn "hello" /usr/share/           # 在/usr/share目录下查找包含"hello"的文件,并显示行号

3. find命令

find命令用于在指定目录下查找文件和目录。它可以根据文件名、大小、类型、权限等多种条件进行查找。
优点:真实磁盘扫描查找,查找方式丰富,支持衔接其他指令对查找到内容进而做其他操作。
缺点:慢,效率低

语法:

find 查找的路径 -查找的方式(name size type perm user group newer)

常用查找方式:

  • name:按照文件名查找文件

    • find / -name "*.jpg":在根目录下查找以.jpg结尾的文件
    • find / ! -name "*.jpg":在根目录下查找不是以.jpg结尾的文件
    • find / -name "*.jpg" -o -name "*.gif":在根目录下查找以.jpg或.gif结尾的文件
    • find / -regex "ab[0-9]$":使用正则表达式匹配查找以ab开头后面跟一个数字结尾的文件
  • size:按照文件大小查找(常用单位c k M G)

    • find / -size 655k:在根目录下查找大小约为655k的文件
    • find / -size -655k:在根目录下查找小于655k的文件
    • find / -size +655k:在根目录下查找大于655k的文件
    • find / -size +655k -size -6550k:在根目录下查找大小大于655k但小于6550k的文件
  • user:按照文件属主来查找文件

    • find / -user it01
  • group:按照文件所属组来查找文件

    • find / -group itgrp
  • type:按照文件类型查找(f d l s p c b)

    • find /dev/ -type b:查找块设备文件
    • find /dev/ -type c:查找字符设备文件
    • find /tmp -type f:查找普通文件
    • find /tmp -type d:查找目录文件
  • perm:按照文件权限来查找文件

    • find / -perm 0700:查找权限等于0700的文件
    • find / -perm 01777:查找权限等于01777的文件,例如tmp目录
    • find / -perm u=rwx:查找用户权限为rwx的文件
    • find / -perm /u=r:查找用户权限包含’r’的文件,不管其他权限
    • find /usr/ -perm /u=s:查找用户包含s权限(冒险位的)的文件
  • newer file1:查找更改时间比文件file1新但比文件file2旧的文件

    • find /home/ -newer /home/a_f_8:查找比/home/a_f_8新的文件
    • find /home/ ! -newer /home/a_f_8:查找比/home/a_f_8老的文件
  • mtime/atime/ctime:根据时间查找

    • find / -mtime 7:查找文件修改时间为7天的文件(刚好等于7天)
    • find / -mtime -7:查找文件修改时间小于7天的文件
    • find / -mtime +7:查找文件修改时间大于7天的文件
    • find /home/ -mtime 0:查找今天修改的文件
  • -mount:指定只查找挂载的文件系统

    • find / -mount -size +10M

动作行为:

  • -ls:将查找的内容显示属性信息

    • find / -name "*.jpg" -ls:显示查找到的以.jpg结尾的文件的属性信息
    • find /home/ -empty -ls:在/home目录下查找空的普通文件,并执行ls显示属性的动作
  • -delete:删除查找到的文件

    • find /home/ -empty -delete:在/home目录下查找空的普通文件,并删除它们
  • -exec:执行命令

    • find /sbin -type f -size +1M -exec ls -lh {} \;:在/sbin目录中查找文件类型为常规文件并且文件大小大于1M,再使用ls命令来查看找到的文件的属性
    • find /sbin -type f -size +1M -exec cp {} /tmp \;:在/sbin目录中查找文件类型为常规文件并且文件大小大于1M,再使用cp命令将这些文件复制到/tmp目录下
  • -ok:执行命令,但依次询问

    • find /home/ -empty -ok mv {} / \;:在/home目录下查找空的普通文件,然后依次询问是否执行mv命令将它们移动到根目录下

示例:

find / -name "*.jpg"

通过这些命令,可以高效地在Linux系统中查找文件。无论是快速定位文件位置,还是深入搜索文件内容,这些工具一般都能满足需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多练项目

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值