这个命令:
strings your_file | awk '{total += length + 1} END {print total}'
我们来逐步解释它的含义:
这是 strings 命令,来自于 binutils 工具包。它的作用是:
从二进制文件中提取可打印的 ASCII 字符串。
也就是说,它会从 your_file 这个二进制文件中找出所有“可见的文本字符串”,一行一行输出。
这部分是 awk 脚本,对 strings 命令的输出做处理。
在 awk 中,length 是一个内建函数,用于返回当前行的长度(字符串长度)。
例如:
echo "hello" | awk '{print length}'
# 输出: 5
所以在这个脚本中:
total += length + 1
表示:每一行的长度加 1(因为每行原本有个 \n 被去掉了,或者表示 null terminator \0),然后加到 total 变量中。
这是因为 strings 提取出来的每个字符串在原文件中,应该以 null 字符 \0 结尾(这是 C 字符串的约定)。但 strings 输出的时候是按行输出的,不会显示 \0。
所以如果你想估算这些字符串在原始二进制文件中实际占用的字节数,你需要把每一行的长度加上一个字节(对应 \0)。
strings your_file | awk '{total += length + 1} END {print total}'
这个命令的作用是:
估算 your_file 中所有以 null 结尾的可打印字符串在文件中总共占用了多少字节。

