在 Linux 下,strings 和 grep 经常一起用,但它们作用和定位完全不同。简单说:
strings:从“非文本文件”里提取可打印字符串
grep:在“文本”里按模式查找内容
下面详细对比一下。
strings 是干什么的?从二进制文件、可执行文件、图片、压缩包等非纯文本文件中,提取出人类可读的字符串(默认长度 ≥ 4)。
.so、.o、ELF 文件内容strings /bin/ls
可能输出:
Usage: %s [OPTION]... [FILE]...
ls: cannot access %s
strings -n 6 file # 只显示长度 ≥ 6 的字符串
strings -a file # 扫描整个文件(不只 data 段)
grep 是干什么的?在文本文件或文本流中,按正则表达式搜索匹配行。
grep "error" app.log
grep -r "main" src/
| 对比项 | strings | grep |
|---|---|---|
| 处理对象 | 二进制 / 非文本文件 | 文本文件 / 文本流 |
| 主要目的 | 提取字符串 | 搜索匹配内容 |
| 是否理解正则 | 否 | 是 |
| 输出内容 | 字符串片段 | 匹配的行 |
| 常配合 | grep 使用 | 可独立使用 |
因为 strings 提取出来的内容,往往还要再筛一次:
strings binary | grep "http"
含义:
http 的行如果你有具体使用场景(比如分析程序、看日志、逆向),我可以给你更合适的命令示例。