什么可能导致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
和,并在成功时打印附加字符串。jbjb
application/msword
注意:如果您想修复该文件,则必须删除、重命名或重新生成(使用file -C
)二进制版本 ,/usr/share/file/magic.mime.mgc
因为file
与文本版本相比,您更喜欢该版本。