Linux 查找文件 & 搜索内容介绍

前言

在日常Linux运维、后端开发工作中,经常会遇到两个需求:我要找到服务器上某个文件在哪 、在一堆文件里面找出包含指定关键词的内容 。很多新手会混淆 find 和 grep:find 是找文件本身,grep 是在文件里搜文本内容,二者经常搭配使用。这篇文章把查找文件、搜索文本的常用命令、参数、实战案例一次性讲清楚。

一、find:在目录下查找文件(找文件)

find 是Linux最强大的文件查找命令,可以按文件名、文件大小、修改时间、文件类型等条件搜索,遍历指定目录及其子目录。

语法格式:

bash 复制代码
find [搜索路径] [匹配条件]

1. 按文件名查找(最常用)

bash 复制代码
# 在 /etc 目录下查找名称为 nginx.conf 的文件,精确匹配
find /etc -name "nginx.conf"

# 忽略大小写查找,-iname
find /etc -iname "nginx.conf"

# 模糊匹配,* 是通配符,查找所有 .log 后缀文件
find /var/log -name "*.log"

注意:name 后面的匹配字符串建议加双引号,避免shell提前解析通配符。

2. 按文件类型查找

  • -f:普通文件
  • -d:目录
  • -l:软链接
bash 复制代码
# 查找 /home 下面所有目录
find /home -type d

# 查找所有普通文件
find /opt -type f

3. 按文件大小查找

单位:c字节、kKB、MMB、GGB

bash 复制代码
# 查找大于100M的文件
find / -type f -size +100M

# 查找小于10k的文件
find /tmp -type f -size -10k

4. 按修改时间查找

  • -mtime:按修改时间,单位天
  • -mmin:按修改时间,单位分钟
bash 复制代码
# 查找7天内修改过的文件
find /var/log -mtime -7

# 查找最近30分钟修改的文件
find /opt -mmin -30

5. find 找到文件后直接执行操作(-exec)

找到文件之后,批量删除、批量查看,非常实用

bash 复制代码
# 查找/tmp下所有 .txt 文件,然后删除
find /tmp -name "*.txt" -exec rm -f {} \;

# 找到日志文件,并用ls -l查看详情
find /var/log -name "*.log" -exec ls -l {} \;

{} 代表find匹配到的每一个文件,\; 是结束标记

补充:快速查找 locate

locate 查找速度比find快很多,它是读取系统数据库,不是实时遍历磁盘。

缺点:数据库不是实时更新,新增文件可能搜不到,需要手动更新数据库 updatedb

bash 复制代码
locate nginx.conf

二、grep:在文件中搜索文本内容(搜内容)

grep 全称 Global Regular Expression Print,作用:在文件里搜索匹配的字符串,打印匹配行,日志排查、代码检索的神器。

基础语法:

bash 复制代码
grep [参数] "关键词" 文件名

常用基础参数

bash 复制代码
# 在 app.log 中搜索 error 关键词
grep "error" app.log

# -i 忽略大小写搜索
grep -i "error" app.log

# -n 显示匹配内容所在行号(高频)
grep -n "error" app.log

# -v 反向匹配,输出不包含关键词的行
grep -v "info" app.log

# -c 只统计匹配到的行数,不输出内容
grep -c "warn" app.log

# -o 只输出匹配到的关键词本身,而不是整行
grep -o "user_id:[0-9]*" app.log

递归搜索目录下所有文件 -r / -R

当不知道关键词在哪个文件里,递归遍历整个目录所有文件搜索:

bash 复制代码
# -r 递归搜索 /opt 下所有文件,包含子目录
grep -r "timeout" /opt

# -rn 递归 + 显示行号,线上排查最常用组合
grep -rn "timeout" /opt

小提示:grep -R 会跟进软链接,grep -r 默认不跟进软链接

高亮匹配内容

很多系统默认配置了高亮,如果没有,可以加上 --color=auto

bash 复制代码
grep --color=auto -n "Exception" app.log

三、find + grep 组合使用(高频实战)

场景:找到所有日志文件,再在里面搜索报错信息

bash 复制代码
# find找到所有log文件,交给grep搜索关键词
find /var/log -name "*.log" -exec grep -n "Exception" {} \;

四、管道符搭配:日志实时过滤(tail + grep)

线上看实时日志,只抓取报错,不用刷屏:

bash 复制代码
tail -F app.log | grep -i error

五、正则简单使用(grep)

grep支持基础正则,高级正则可以用 egrep 或者 grep -E

bash 复制代码
# 搜索 error 或者 warn
grep -E "error|warn" app.log

六、命令对比速查表

命令 核心作用 特点
find 查找文件/目录 实时遍历磁盘,支持文件名、大小、时间、类型多条件,慢但准确
locate 查找文件 读取数据库,速度快,数据非实时
grep 文件内搜索文本内容 匹配行、支持正则、递归检索

七、实战避坑小提示

  1. find / 从根目录搜索会遍历全部磁盘,速度很慢,尽量缩小搜索路径;
  2. 用 find 搜索根目录会大量输出权限不足报错,可以加 2>/dev/null 屏蔽错误:
bash 复制代码
find / -name "nginx.conf" 2>/dev/null
  1. grep 搜索关键词有空格、特殊符号时,一定要用双引号包裹;
  2. 不要直接 grep 二进制文件,会输出大量乱码;
  3. 递归grep大目录时,尽量限定文件后缀,减少搜索范围,提升速度。

八、小结

一句话分清两者:

✅ find:找文件在哪(按文件属性筛选)

✅ grep:在文件里面找文字(按内容筛选)

这两个命令是Linux检索的黄金组合,排查配置、检索代码、定位日志报错几乎每天都会用到,也是面试高频考点。

相关推荐
小弥儿1 小时前
GitHub今日热榜 | 2026-10-24:智能体安全攻防同日上榜
1024程序员节
John_Hui1 小时前
MySQL 进阶知识
数据库·sql·mysql·1024程序员节
yma161 小时前
从零搭建 P2P 聊天室:yma16.cloud 在线工具实战
前端·1024程序员节
小码哥(^_^)1 小时前
人力资源面试题集1
eclipse·1024程序员节
染指11101 小时前
155.Agent-LangGraph-节点级重试策略
人工智能·langchain·1024程序员节·agents
labview_自动化1 小时前
Labview动态加载类
1024程序员节
Yxj-52113141 小时前
JS中的内存管理是如何工作的?
1024程序员节
归-途1 小时前
C# 实现扫描件自动分栏切图
1024程序员节
Oiiouui1 小时前
Godot-GridGame架构数据层篇
架构·godot·1024程序员节