温馨提示×

为何linux strings显示不全呢

小樊
43
2026-10-08 09:15:34
栏目: 智能运维

strings 命令在 Linux 里“显示不全”通常不是真的丢了内容,而是它的默认行为和文件格式限制了输出。常见原因和对应解决办法如下:


一、最常见原因

1️⃣ 只提取“可打印字符串”,且默认长度太短

strings 默认只输出连续可打印字符长度 ≥ 4 的字符串。

strings file

✅ 解决:降低最小长度

strings -n 1 file

2️⃣ 只扫描某些段(section)

strings 默认只扫描:

  • 可执行文件中的 .text、.data、.rodata 等
  • 不会扫描所有字节

✅ 解决:扫描整个文件

strings -a file
# 或
strings --all file

3️⃣ 编码问题(中文 / UTF-8 / 宽字符)

strings 对 多字节字符(UTF-8、中文)支持很差,经常截断或忽略。

例如:

测试字符串123

可能只显示:

123

✅ 解决方式:

  • 用 grep + iconv
  • 或换工具(见下)

4️⃣ 压缩 / 加密 / 打包内容

如果字符串在:

  • zip / gzip / png / pdf 内部
  • 加密数据段

strings 是看不到的

✅ 解决:

binwalk file
foremost file

二、更好用的替代方案

✅ 查看“全部可见内容”

cat file | tr -c '[:print:]\n' '.'

✅ 支持中文 / UTF-8

strings -e l file   # 16-bit little endian
strings -e b file   # 16-bit big endian

✅ 更强工具

hexdump -C file
xxd file

三、调试建议(很重要)

你可以先确认:

file yourfile

如果是:

  • ELF → 用 strings -a
  • PNG / PDF → 基本看不到内部
  • 二进制协议 → 用 xxd

四、总结一句话

strings 显示不全,99% 是因为:默认只扫描部分段 + 最小长度限制 + 不支持中文

如果你愿意,可以把:

  • 文件类型
  • 你期望看到的字符串示例 发给我,我可以给你精确命令。

0 踩