ale*_*lex 6 file-command mime-types files
什么可能导致file(1)命令输出application/msword application/msword(是的,连续两次)作为某些.doc 文件的 MIME 类型?通常它只打印application/msword.
如果在没有--mime它的情况下运行,则会Microsoft Office Document在“普通”和“特殊”.doc 文件上打印。
来自 magic(5) 手册页:
某些文件格式包含与文件类型一起打印的附加信息,或者需要附加测试来确定真实的文件类型。这些附加测试由偏移量前面的一个或多个 > 字符引入。行中>的数字表示测试的级别;开头没有 > 的行被认为处于级别 0。测试以树状层次结构排列:如果对级别 n 的行的测试成功,则执行级别 n+1 的所有后续测试,并且如果测试成功则打印消息,直到出现级别为 n(或更低)的行。对于更复杂的文件,可以使用空消息来获得“if/then”效果,方法如下:
0 string MZ
>0x18 leshort <0x40 MS-DOS executable
>0x18 leshort >0x3f extended PC executable (e.g., MS Windows)
Run Code Online (Sandbox Code Playgroud)
在我们的 Scientific Linux 5.5 系统上,/usr/share/file/magic.mime第 836..838 行如下所示:
0 string \320\317\021\340\241\261\032\341 application/msword
>546 string bjbj application/msword
>546 string jbjb application/msword
Run Code Online (Sandbox Code Playgroud)
因此,一旦第一行匹配,file将在给定位置检查bjbj和jbjb,并在成功时打印附加application/msword字符串。
注意:如果您想修复该文件,则必须删除、重命名或重新生成(使用file -C)二进制版本 ,/usr/share/file/magic.mime.mgc因为file与文本版本相比,您更喜欢该版本。