私は周りを検索しましたが、トピックに関する情報を見つけることができないようです。
既存のファイルのMIMEタイプをどのように設定しますか?
たとえば、タイプtext/html
のファイルを作成しようとしています
MIMEタイプは実際にはファイルシステムに保存されません。それらは、ファイルの処理方法を知る便利な方法にすぎません。 MIMEタイプを取得するには、プログラムを実行する必要があります。
一部のプログラムは、ファイル拡張子だけでファイルのmimeタイプを検出しますが、他のプログラムはマジックナンバーまたは特殊マジックパターン(本質的には 正規表現 )。
例として、空のファイルを作成する_touch test.html
_を実行します。
次に、_xdg-mime query filetype test.html
_または_mimetype test.html
_を実行します。両方とも_text/html
_型を返します。
ただし、_file --mime-type -b test.html
_を実行すると、_inode/x-empty
_が返されます。
したがって、すべてのプログラムがファイルに対して同じように動作するようにするには、ファイルは正しい拡張子(データ)と正しい拡張子を持っている必要があります。
マジックナンバーとは?
プロファイルイメージで_
xxd image | head -1
_を実行すると、次のような出力が作成されます。_
00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR
_Wikipedia によると、_
89 50 4E 47 0D 0A 1A 0A
_はすべての_image/png
_ファイルの標準ヘッダーです。
ファイルコマンドはどのように機能しますか?
file(1)
manページから:
この順序で実行されるテストには、ファイルシステムテスト、マジックテスト、言語テストの3つのセットがあります。 ...
ファイルシステムのテストは、
stat(2)
システムコールからの戻り値を調べることに基づいています。プログラムは、ファイルが空かどうか、または何らかの特殊ファイルかどうかを確認します。 ...マジックテストは、特定の固定形式のデータを含むファイルをチェックするために使用されます。 ...これらのファイルには、ファイルの先頭近くの特定の場所に「マジックナンバー」が保存されており、UNIXオペレーティングシステムにファイルがバイナリ実行可能ファイルであり、そのいくつかのタイプがどれであるかを伝えます。 ...ファイルがマジックファイルのエントリのいずれとも一致しない場合、テキストファイルのように見えるかどうかが調べられます。 ...
リストされている文字セットのいずれかで書き込まれたと識別できないファイルは、単に「データ」と呼ばれます。
ファイルはどのマジックパターンを使用するかをどのように知るのですか?
繰り返しますが、 file(1)
manページから:
これらのファイルを識別する情報は、コンパイルされたマジックファイル_
/usr/share/misc/magic.mgc
_、またはコンパイルされたファイルが存在しない場合はディレクトリ_/usr/share/misc/magic
_のファイルから読み取られます。さらに、_$HOME/.magic.mgc
_または_$HOME/.magic
_が存在する場合は、システムマジックファイルよりも優先して使用されます。/etc/magicが存在する場合、他のマジックファイルと一緒に使用されます。
_strace file image |& grep magic
_を実行すると、file
コマンドがこれらのファイルを探すことがわかります。
/usr/lib/x86_64-linux-gnu/libmagic.so.1 => libmagic(3) 〜/ .magic.mgc
〜/ .magic
/etc/magic.mgc
/etc/magic
/usr/share/misc/magic.mgc
他のプログラムが使用する_/etc/mime.types
_のような他のファイルがあります。このファイルは、MIMEタイプに拡張子を割り当てます。たとえば、_grep -i text/html /etc/mime.types
_は以下を生成します。
_text/html html htm shtml
_