![什么可能导致 file(1) 命令出现异常行为?](https://linux22.com/image/1990/%E4%BB%80%E4%B9%88%E5%8F%AF%E8%83%BD%E5%AF%BC%E8%87%B4%20file(1)%20%E5%91%BD%E4%BB%A4%E5%87%BA%E7%8E%B0%E5%BC%82%E5%B8%B8%E8%A1%8C%E4%B8%BA%EF%BC%9F.png)
什么可能导致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
与文本版本相比,您更喜欢该版本。