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

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

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

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

那只是文本文件

或者

这“只是”一个以幻数开头的 gzip 压缩文件BAM\1

你知道什么例子吗?

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

答案1

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

magic 文件中使用的语言非常强大,因此很少需要恢复到自定义 C 编码。我唯一一次愿意这样做是在 90 年代,当时匹配 HTML 和 XML 文件很困难,因为(当时)没有办法拥有灵活的大小写和偏移量匹配,以便能够使用一种模式解析<HTMLand< Html和。 < html。我在 C 中实现了它作为“字符串”模式的修饰符,允许忽略大小写并压缩(可选)空白

需要对 C 进行这些更改以及魔法文件的改编。除非file此后源代码发生了重大更改,否则您始终需要在magic文件中修改(或提供额外的)规则来匹配这些 C 代码更改。因此,您不妨开始尝试仅更改 magic 文件来实现此目的,如果确实不起作用,则重新更改 C 代码。

答案2

对于下一个发现此内容的 $(user_searchengine)user:

像 BAM 这样的简单规则如下所示:
OFFSET TYPE [OPERAND]FLAG MESSAGE
对于 BAM:
0 string BAM\1 BAM
这将在查找标头时打印字符串 BAM。

了解更多信息此 IBM 站点信息似乎有点过时,但对于简单的用例来说仍然足够了。 男人还有大量有关格式的信息。

答案3

您不需要总是使用该-m选项;因为其手册页中的 documentendfile(1)默认情况下也会读取该~/.magic文件(或其编译版本:)~/.magic.mgc,因此您可以在那里添加定义;无需搞乱系统范围/usr/share/magic*/etc/magic.

相关内容