strings命令用于从二进制文件中提取可打印字符串,在处理大文件时可能会较慢。以下是几种优化strings命令执行效率的方法:
strings -a -n 4 filename
-a
:扫描整个文件而不仅仅是数据段-n 4
:只显示长度≥4的字符串(减少短字符串的输出)如果知道字符串可能位于特定偏移量范围内:
strings -t d -N 1000000 -M 2000000 filename
-N
:开始扫描的偏移量-M
:最大扫描字节数考虑使用专门优化的工具:
- rabin2 -zz
(来自radare2工具集)
- floss
(来自vivisect工具集)
- scalpel
(针对特定文件类型的字符串提取)
将大文件分割后并行处理:
split -b 100M largefile chunk_
parallel strings {} ::: chunk_* > all_strings.txt
rm chunk_*
strings -f filename > output.txt
-f
:在输出中包含文件名(但实际可能减少I/O操作)提高strings命令的优先级:
nice -n -10 strings filename
如果可能,将文件放在SSD或内存文件系统中处理:
cp filename /dev/shm/
strings /dev/shm/filename
将输出直接重定向到文件而非终端:
strings filename > output.txt
测试不同方法的效率:
time strings -a -n 4 largefile > /dev/null
time rabin2 -zzq largefile > /dev/null
选择最适合您特定用例的方法,通常需要权衡输出完整性和执行速度。