阅读有关 Linux 文件命令的文档。我在魔法测试描述中发现了这一点:
Any file with some invariant identifier at a small fixed offset into the file
can usually be described in this way. The information identifying these files
is read from /etc/magic and the compiled magic file /usr/share/misc/magic.mgc,
or the files in the directory /usr/share/misc/magic if the compiled file
does not exist. In addition, if $HOME/.magic.mgc or $HOME/.magic exists,
it will be used in preference to the system magic files.
我可以想象魔法文件是“MagicNumber -> Kind of file”关系的集合。 “文件”程序运行以查找文件类型,并获取文件头。但我不明白为什么:
- 为什么要编译这个文件?
- 有什么方法可以创建一个神奇的编译文件以与命令一起使用?
- 与此类测试和文件相关的命令选项的用法是什么?前任:
-C or -m
。
答案1
- 为什么要编译这个文件?
我怀疑这是出于性能原因。魔法数据库是不小。 File 需要解析每个人类可读的神奇源文件,构建用于检测文件格式的结构,计算每个模式的强度并据此对所有内容进行排序。这个过程可能会慢得难以忍受,尤其是几十年前(文件自 70 年代以来就已存在)。
我猜他们可以让文件在执行时构建数据库并缓存结果,但考虑到用例,它似乎完全没有必要,很复杂,并且会产生许多其他问题。
- 有什么方法可以创建一个神奇的编译文件以与命令一起使用?
file -m MAGIC_SOURCE -C
这将创建一个已编译的魔术文件,其基本名称MAGIC_SOURCE
和扩展名.mgc
与当前工作目录中的相同。
您可以在文件或目录上使用它。避免目录尾部斜杠。
例如,file -m ~/.magic -C
将所有~/.magic/*
源代码编译成一个.magic.mgc
编译文件。
- 与此类测试和文件相关的命令选项的用法是什么?例如:
-C
或-m
。
-C
告诉 file 编译一些源文件。
-m
告诉文件要使用哪个魔术文件(源文件或编译文件)。您也可以不使用它-C
,例如使用任何文件(包括源文件)来检测文件类型。
man file
有关该命令的更多信息以及man magic
有关神奇源文件语法的更多信息,请参阅 参考资料。