file命令的“魔术测试”是什么意思?


20

我正在阅读有关file命令的信息,但遇到了一些我不太了解的内容:

文件旨在确定要查询的文件的类型。文件通过对相关文件执行组测试来完成此任务:

  • 文件系统测试
  • 魔术测试
  • 语言测试

什么是魔术测试?

Answers:


15

这是指文件开头的许多文件格式具有的“魔术字节”,它们表明文件的类型。

例如,如果文件以开头,#!则将其视为脚本。


28

这里的“魔术”是指“ 魔术数字 ”:位于文件中已知位置的特殊值,用于标识其类型。该file命令具有这些编号及其对应的类型的数据库。该数据库附带的库称为libmagic,您可以从自己的程序访问。

正如我们可能想到的那样,它们不一定是“数字”。例如,PNG图像文件始终以“ \ x89PNG \ r \ n \ x1a \ n”开头,Java类以四个字节(以十六进制表示)CA FE BA BE开头,而HTML文件的某处带有“ <html”即将开始。这只是已知类型的文件中的一小部分数据序列,通常非常接近开始。

当人们定义文件格式时,他们经常有意地在其中包含其中一种,或者只是作为使格式适合在一起的一部分。file以后可以使用它们。它还具有其他查看文件内容以猜测其内容的方式(“语言测试”)。


6
注意,最初,“魔术数字”是内核使用的可执行文件的前两个字节,以适当的方式加载该文件。#!实际上就是这样的一个例子,因为内核本身在看到这些字节时应该调用后面的命令。
IMSoP 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.