Existem 2 bibliotecas que normalmente lidam com isso. A biblioteca shared-mime-info é a grande. No entanto, há também o utilitário arquivo que fornece 'libmagic'.
Cada um deles mantém seu próprio banco de dados. No entanto, o shared-mime-info é mais comum e projetado para ser extensível.
Quanto a como adicionar uma entrada, o local no meu sistema é /usr/share/mime
, embora possa variar de acordo com a distribuição. Basicamente você acabou de adicionar um arquivo xml lá que explica como identificar seu formato de arquivo (no meu sistema, os pacotes colocam seus arquivos em /usr/share/mime/packages
).
Depois de adicionar seu arquivo xml, use o comando update-mime-database
para gerar novamente o cache. (Há um belo tutorial disponível no site do projeto shared-mime-info: link )
O arquivo de exemplo é assim:
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
<mime-type type="image/png">
<comment xml:lang="en">PNG image</comment>
<comment xml:lang="af">png beeld</comment>
...
<magic priority="50">
<match type="string" value="\x89PNG" offset="0"/>
</magic>
<glob pattern="*.png"/>
</mime-type>
</mime-info>
Recursos gerais, como a especificação completa do arquivo xml, também são mais bem obtidos no site do projeto: link