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