在 Ubuntu(及其他 Linux 发行版)中,strings 通常指 GNU binutils 里的 strings 命令,用于从二进制文件中提取可打印字符串。所谓“优化 strings 性能”,一般可以从使用方式、参数调优、替代工具、系统/IO 层面几个角度入手。
下面按实用优先级说明。
strings 参数(最常用)默认 strings 会扫描整个文件,包括数据段、符号表等。
strings -n 6 file.bin
-n 6:只输出长度 ≥ 6 的字符串strings -e l file.bin
-e:指定字符编码(s/S/l/L)objdump(更快定位)如果只是想看字符串表:
objdump -s -j .rodata file
通常比 strings 全文件扫描更快。
grep 再 strings(不推荐)❌ 错误方式:
strings big.bin | grep keyword
✅ 更好方式:
strings -n 8 big.bin | grep keyword
awk / rg 替代 grepstrings file | rg "pattern"
ripgrep 通常比 grep 快。
rabin2(radare2)rabin2 -z file
strings 的并行版本对多个文件:
ls *.bin | xargs -P 8 -I{} strings -n 6 {}
-P 8:8 个并行进程mkdir /dev/shm/work
cp big.bin /dev/shm/work/
strings /dev/shm/work/big.bin
cp 到本地 SSDioniceionice -c 3 strings big.bin
某些场景下静态 strings 启动更快。
如果只关心 ASCII:
fread + 状态机strings 快数倍| 方法 | 相对速度 |
|---|---|
strings 大文件 |
1x |
strings -n 8 |
2–3x |
rabin2 -z |
3–5x |
strings + tmpfs |
2x |
| 并行 xargs | 线性扩展 |
日常最优方案:
strings -n 6 binary | rg "pattern"
大文件 / 多文件:
ls *.bin | xargs -P $(nproc) -I{} strings -n 6 {}
只关心字符串表:
rabin2 -z binary
如果你能说明:
我可以给出更精准的优化方案。