grep -ri 可递归不区分大小写搜索敏感关键字,推荐加 -n、--color=always、--include、--exclude-dir 和 2>/dev/null 提升实用性与安全性,并用 -I 避免二进制干扰。

用 grep -r -i 可以递归、不区分大小写地搜索目录中含敏感关键字的文件行,但要注意路径权限、二进制文件干扰和编码问题。
基础命令写法
最常用形式:
grep -r -i "password" /path/to/dir
等价简写(-r 和 -i 可合并):
grep -ri "password" /path/to/dir
说明:
- -r 表示递归进入子目录
- -i 表示忽略大小写(匹配 Password、PASSWORD、passWord 等)
- 默认输出格式为 文件名:匹配行内容
提升实用性与安全性
实际搜索敏感词(如 api_key、secret、private_key)时建议加这些选项:
-
--include="*.txt"或--include="*.conf":只搜索特定后缀文件,避免遍历图片、压缩包等无意义二进制文件 -
--exclude-dir=".git":跳过版本库目录,加快速度并减少噪音 -
-n:显示行号,便于定位 -
--color=always:高亮关键词,肉眼更易识别 -
2>/dev/null:屏蔽“权限拒绝”或“没有那个文件或目录”等报错信息
示例:
grep -rni --include="*.yml" --include="*.env" --exclude-dir=".git" "api_key" ./ 2>/dev/null
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
处理常见干扰情况
遇到以下情况结果可能不准或报错:
-
二进制文件误报:默认 grep 遇到二进制文件会打印
Binary file xxx matches。加-I(大写 i)可自动跳过所有二进制文件 -
文件名含空格或特殊字符:用
--null+xargs -0组合更安全,但日常简单搜索通常无需 -
中文或 UTF-8 编码异常:确保终端 locale 支持 UTF-8(
locale | grep UTF),必要时加--text强制按文本处理
批量查多个敏感词
用 -e 指定多个模式:
grep -rni -e "password" -e "secret" -e "private_key" --include="*.py" --include="*.js" ./ 2>/dev/null
或从文件读取关键词列表(每行一个):
grep -rni -f keywords.txt --include="*.conf" ./ 2>/dev/null
其中 keywords.txt 内容示例:
api_key
db_password
access_token










