在 Linux 下,strings 和 grep 是两个用途不同、关注对象不同的命令,经常配合使用,但不是同一类工具。
下面从几个维度对比说明。
strings从一个“非文本文件”中提取可打印字符串
.so、.o)把文件里连续的、可打印的字符序列找出来
示例:
strings a.out
输出类似:
/lib64/ld-linux-x86-64.so.2
Usage: prog <file>
Hello, world
grep在文本中搜索匹配某种模式的内容
某一行或某一段是否符合正则 / 字符串规则
示例:
grep "error" log.txt
| 工具 | 适合输入 |
|---|---|
strings |
二进制 / 非纯文本 |
grep |
文本(或已是字符串的输出) |
如果你直接对二进制文件用 grep:
grep "main" a.out
stringsgrep它们经常一起用:
strings a.out | grep "password"
含义:
strings:从二进制提取可读字符串grep:在结果中搜索关键词| 对比项 | strings | grep |
|---|---|---|
| 主要目的 | 提取字符串 | 搜索匹配 |
| 处理对象 | 二进制 / 混合文件 | 文本 |
| 是否支持正则 | ❌(本身不支持) | ✅ |
| 是否理解“行” | ❌ | ✅ |
| 是否用于分析程序 | ✅ 常用 | 一般不直接用 |
strings 负责“把东西变成文字”,grep 负责“在文字里找东西”。
如果你愿意,我也可以举:
xxd、objdump 的对比