为何单字节纯ASCII文件被file命令判定为‘no magic’,双字节则否?
文件命令(file)的短文件识别问题解答
1. 单字节文件显示“no magic”的原因
file命令的识别逻辑是先匹配magic规则(文件特征签名),匹配失败后再尝试识别文本类型:
- 单字节内容(空格、换行、单个ASCII字母)长度太短,无法满足任何magic规则的最小匹配要求(绝大多数magic规则需要至少2字节的特征数据),因此会提示“no magic”。
- 同时,file对ASCII文本的判定有长度门槛:单字节文件因长度不足,不会被归类为ASCII文本;当文件长度达到2字节及以上,且内容均为ASCII字符时,才会被识别为“ASCII text”。
2. 会被判定为“有magic”的极小文件及用途
极小magic文件的特征
只要文件内容匹配某条magic规则的最小长度要求即可,比如:
- 2字节的
MZ:会被识别为MS-DOS executable - 2字节的
\x1f\x8b:会被识别为gzip compressed data - 3字节的
GIF89a:会被识别为GIF图像文件
这类文件的用途
- 测试file命令的识别逻辑,验证magic规则的有效性
- 作为自动化测试中的最小化测试用例,模拟特定文件类型的结构
- 用于文件系统或处理工具的兼容性测试,验证工具对不同文件类型的处理能力
测试代码示例
/bin/rm junk printf ' ' > junk; file junk # 输出: junk: very short file (no magic) echo > junk; file junk # 输出: junk: very short file (no magic) printf 'd' > junk; file junk # 输出: junk: very short file (no magic) printf 'dd' > junk; file junk # 输出: junk: ASCII text, with no line terminators
内容的提问来源于stack exchange,提问作者Jacob Wegelin
相关产品推荐
相关产品推荐

