怎么在Linux利用Grep-Ri递归搜索目录下所有包含敏感关键字的文件行

千杰君_6208

千杰君_6208

2026-04-30

223人浏览

原创

grep递归搜索需加-H强制显示文件名,用--binary-files=without-match跳过二进制文件,-n显示行号,-A/-B添加上下文,2>/dev/null压制权限错误。

怎么在linux利用grep-ri递归搜索目录下所有包含敏感关键字的文件行

grep -r -i 会忽略大小写但不默认显示文件名

直接用 grep -r -i "password" 在目录里搜,结果可能只看到匹配行,却不知道来自哪个文件。这是因为 grep 在单文件模式下默认显示文件名,但在递归(-r)且只查一个文件时反而可能省略——尤其当目标目录下只有一个匹配文件,或 shell 展开了通配符导致行为异常。

解决方法很简单:显式加上 -H 参数强制显示文件名,哪怕只匹配一个文件:

grep -r -i -H "password" ./config/
  • -H 是关键,别依赖默认行为
  • 如果目标是子目录而非当前目录,路径末尾不加 / 也能工作,但加了更明确
  • 遇到权限拒绝(Permission denied)会混在结果里干扰阅读,后面会提到怎么过滤

跳过二进制文件避免乱码和卡顿

默认 grep -r 会硬读所有文件,包括 .so、.zip、编译产物等二进制文件,结果要么输出一堆不可读字符,要么卡住几秒才跳过。

用 --binary-files=without-match 让 grep 把二进制文件当“没匹配”快速跳过:

grep -r -i -H --binary-files=without-match "api_key" ./src/
  • 不要用 --binary-files=skip,它在某些老版本 grep 里不生效
  • 如果明确知道要排除某类文件(如 *.log),可用 --exclude="*.log"
  • 想排除整个目录(如 node_modules),加 --exclude-dir="node_modules",比 find | grep 组合更轻量

匹配行号和上下文让定位更准

光看到关键词不够,得知道在哪一行、前后有没有配置项或注释。用 -n 显示行号,-A/-B 加上下文:

Linuxdo Application
Linuxdo Application

为 Linux.do 注册撰写高通过率、去 AI 化的中文小作文。进行自适应调查以了解申请人的真实背景,...

下载
grep -r -i -H -n -A 1 -B 1 "secret" ./deploy/
  • -n 必加,否则改文件时还得手动数行
  • -A 1 表示匹配行后多打 1 行,-B 2 表示前 2 行,数值按需调,别设太大拖慢速度
  • 注意:加了 -A/-B 后,grep 默认不再高亮关键词(部分终端仍会),如需高亮补上 --color=always

权限错误太多?用重定向或 find 配合处理

搜系统目录(如 /etc)时,Permission denied 错误刷屏,淹没了真正结果。最直接的压制方式是丢掉 stderr:

grep -r -i -H "root" /etc/ 2>/dev/null

但要注意:这也会吞掉真正的错误(比如路径不存在)。更稳妥的是用 find 先筛出可读普通文件,再交给 grep:

find /etc -type f -readable -exec grep -i -H "root" {} \; 2>/dev/null
  • -readable 比 -perm 判断更可靠,适配不同 umask
  • find 方式稍慢,但完全规避了 grep -r 对不可读目录的反复报错
  • 如果目标是快速扫描且确定只需忽略权限提示,2>/dev/null 足够,别过度设计

实际用的时候,-r 和 -i 只是起点,真正影响效率和准确率的是 -H、--binary-files=without-match 和对错误流的处理方式——这些细节不写进命令,结果就容易漏、乱、慢。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4450

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3733

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

3033

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

7510

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

7142

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

4073

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3545

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3799

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习