当前位置: 首页 > news >正文

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

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

文章目录

    • 1. `locate`命令
    • 2. `grep`命令
    • 3. `find`命令


在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系统中查找文件。无论是快速定位文件位置,还是深入搜索文件内容,这些工具一般都能满足需求。

http://www.lryc.cn/news/465715.html

相关文章:

  • JAVA 实验六
  • 电脑查不到IP地址是什么原因?怎么解决
  • Axure重要元件三——中继器修改数据
  • 应用层——电子邮件、MIME、简单网络管理协议SNMP
  • 我与C语言二周目邂逅vlog——8.编译和链接
  • Views Page 视图页面
  • Win10 IDEA远程连接HBase
  • 1.centos 镜像
  • electron 操作 cookie
  • 黑马软件测试第一篇_Linux
  • npm run dev 启动前端项目的原理
  • 【2024年SCI一区新算法:黑翅鸢优化算法 】分布式电网故障定位
  • PyTorch 中 12 种张量操作详解
  • 雷池WAF自动化实现安全运营实操案例终极篇
  • 微信小程序实现canvas电子签名
  • 【SpringCloud】Seata微服务事务
  • 重新阅读《马说》,感悟“伯乐相马”背后的被选择与选择的大智慧
  • 深入拆解TomcatJetty(三)
  • MySQL 实现简单的性能优化
  • AB包资源管理器
  • Centos7源报错问题
  • Openlayers高级交互(2/20):清除所有图层的有效方法
  • 黑马JavaWeb-day02
  • laravel清除不同缓存
  • 【Git】解决分支冲突、分支合并、版本回退、版本管理
  • linux file结构体与inode结构体
  • 探索迷宫的奥秘:用 C++ 打造你的迷宫游戏之旅!
  • JSON 注入攻击 API
  • MyBatis入门程序之客户添加、更新与删除
  • 查缺补漏----数据结构树高总结