我正在阅读有关file
命令的信息,但遇到了一些我不太了解的内容:
文件旨在确定要查询的文件的类型。文件通过对相关文件执行三组测试来完成此任务:
- 文件系统测试
- 魔术测试
- 语言测试
什么是魔术测试?
我正在阅读有关file
命令的信息,但遇到了一些我不太了解的内容:
文件旨在确定要查询的文件的类型。文件通过对相关文件执行三组测试来完成此任务:
- 文件系统测试
- 魔术测试
- 语言测试
什么是魔术测试?
Answers:
这是指文件开头的许多文件格式具有的“魔术字节”,它们表明文件的类型。
例如,如果文件以开头,#!
则将其视为脚本。
这里的“魔术”是指“ 魔术数字 ”:位于文件中已知位置的特殊值,用于标识其类型。该file
命令具有这些编号及其对应的类型的数据库。该数据库附带的库称为libmagic,您可以从自己的程序访问。
正如我们可能想到的那样,它们不一定是“数字”。例如,PNG图像文件始终以“ \ x89PNG \ r \ n \ x1a \ n”开头,Java类以四个字节(以十六进制表示)CA FE BA BE开头,而HTML文件的某处带有“ <html”即将开始。这只是已知类型的文件中的一小部分数据序列,通常非常接近开始。
当人们定义文件格式时,他们经常有意地在其中包含其中一种,或者只是作为使格式适合在一起的一部分。file
以后可以使用它们。它还具有其他查看文件内容以猜测其内容的方式(“语言测试”)。
#!
实际上就是这样的一个例子,因为内核本身在看到这些字节时应该调用后面的命令。