file(1)和magic(5):描述其他格式


8

我可以使用filemagichttp://linux.die.net/man/5/magic)覆盖某些其他已知格式的描述吗?

例如,我想描述以下格式:

那只是“文本”文件

要么

那是“只是”一个以魔术数字开头的压缩文件 BAM\1

你知道什么例子吗?

是否可以提供自定义的C代码来测试文件而不是使用magic格式?


Answers:


8

您可以使用该-m选项指定魔术文件的备用列表,如果/usr/share/file/magic.mgc在该列表中(在我的系统上)已编译的魔术文件之前包含自己的魔术文件,则将在“全局”模式之前测试这些模式。您可以创建一个函数或别名,以通过仅发出file命令来透明地始终透明地使用该选项。

魔术文件中使用的语言功能非常强大,因此几乎无需还原为自定义C编码。我觉得倾向于这样做的唯一的一次是在90年代,当匹配的HTML和XML文件是困难的,因为没有办法(当时)有灵活的外壳和偏移匹配必须能够解析<HTML< Html< html同一个模式。我在C中实现了它作为'string'模式的修饰符,从而允许忽略大小写和压缩(可选)空格

C语言中的这些更改也需要魔术文件的改编。并且除非file此后源代码发生了重大变化,否则您将始终需要修改(或提供额外的)规则以magic匹配那些C代码更改的文件。因此,您不妨开始尝试仅通过更改魔术文件来完成此操作,然后在确实无法解决的情况下退回到更改C代码。


谢谢,带有示例的github回购非常有用。
Pierre

1

对于下一个$(user_searchengine)用户,可以找到以下内容:

像BAM这样的简单规则看起来像这样:
OFFSET TYPE [OPERAND]FLAG MESSAGE
在BAM的情况下:
0 string BAM\1 BAM
这将在查找标头时打印字符串BAM。

有关更多信息,此IBM网站的信息似乎有些过时了,但对于简单的用例来说仍然足够。 男人也有很多关于格式的信息。


0

您无需始终使用该-m选项;因为文档末尾的文档末尾file(1)还将默认读取~/.magic文件(或文件的编译版本:)~/.magic.mgc,因此您可以在其中添加定义;无需弄乱整个系统/usr/share/magic*/etc/magic

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.