什么可能导致 file(1) 命令出现异常行为?

什么可能导致 file(1) 命令出现异常行为?

什么可能导致file(1)命令输出application/msword application/msword(是的,连续两次)作为 mime 类型一些.doc 文件?通常它只打印application/msword.

如果在没有--mime它的情况下运行,则会打印Microsoft Office Document“正常”和“特殊”.doc 文件。

答案1

来自 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)

在我们的 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

因此,一旦第一行匹配,将在给定位置file检查bjbj和,并在成功时打印附加字符串。jbjbapplication/msword

注意:如果您想修复该文件,则必须删除、重命名或重新生成(使用file -C)二进制版本 ,/usr/share/file/magic.mime.mgc因为file与文本版本相比,您更喜欢该版本。

相关内容