在 Linux/Unix 里,strings 和 grep 都是文本处理工具,但用途完全不同,可以从“对什么操作”和“干什么事”来理解。
strings:从二进制文件里提取可打印的字符串grep:在文本文件或输入流里按模式查找匹配行strings 是什么?从非文本文件(如可执行文件、库、core dump)中,提取出连续的可打印字符。
strings a.out
输出类似:
/lib64/ld-linux-x86-64.so.2
Usage: test <arg>
Hello World
✅ 输入:二进制文件
✅ 输出:ASCII / Unicode 可打印字符串
❌ 不做“模式匹配”(只是提取)
grep 是什么?在文本或输入流中,查找匹配某个模式(字符串 / 正则)的行
grep "error" app.log
ps aux | grep nginx
✅ 输入:文本或标准输入
✅ 使用:字符串或正则表达式
✅ 输出:匹配到的整行
| 对比项 | strings | grep |
|---|---|---|
| 主要对象 | 二进制文件 | 文本 / 输入流 |
| 功能 | 提取可打印字符串 | 搜索匹配行 |
| 是否支持正则 | ❌ 不支持 | ✅ 支持 |
| 是否输出整行 | ✅ 输出字符串 | ✅ 输出整行 |
| 常见场景 | 分析程序、逆向 | 日志、文本搜索 |
strings a.out | grep "password"
含义:
a.out 中提取字符串grep 查找是否包含 password
strings是“挖字符串”
grep是“找匹配行”
如果你愿意,我也可以拿一个真实二进制文件给你演示两者输出差异。