1. 概要

MIMEタイプは、Webテクノロジーの重要なトピックです。

このチュートリアルでは、MIMEタイプとは何かについて説明し、Linuxコマンドラインユーティリティを使用してファイルのMIMEタイプを取得する方法を学習します。

2. MIMEタイプ

略語MIMEは、多目的インターネットメール拡張機能の略です。 MIMEタイプは、インターネット上のファイルタイプを分類する標準的な方法を形成します。

まず、例として一般的なMIMEタイプを見てみましょう。

text/html

MIMEタイプは、タイプとサブタイプの2つの部分で構成されます。

この例では、タイプは「 text 」であり、サブタイプは「html」です。

現在、登録されているタイプは、アプリケーションオーディオフォントイメージの10種類です。 ]メッセージモデルマルチパートテキスト、およびビデオ

他のいくつかの一般的なMIMEタイプを見てみましょう。

multipart/form-data
text/xml
text/csv
text/plain
application/xml
application/zip
application/pdf

MIMEタイプでは、タイプとサブタイプは大文字と小文字を区別しません。

サブタイプは通常、上記の例の「xml」や「pdf」などのメディア形式で構成されます。 ただし、登録ツリーのさまざまなルールに応じて、ツリーのプレフィックスやサフィックスなどの他のコンテンツを含めることもできます。

完全なMIMEタイプの形式は次のようになります。

type "/" [tree "."] subtype ["+" suffix]

別のMIMEタイプの例を見てみましょう。

application/vnd.api+json

これはAPI固有のMIMEタイプであり、 JSONAPIを参照します。

この例では、タイプとして「 application 」、サブタイプとして「api」があります。 「vnd。」はベンダープレフィックスであり、「 + json 」はサフィックスであり、JSONとして解析できることを示します。

3. ファイルのMIMEタイプを決定する

MIMEタイプは、タイプに名前を付けるための標準的な方法を提供します。 ただし、ファイルのMIMEタイプはLinuxファイルシステムに保存されません。

ファイルのMIMEタイプを判別する方法は2つあります。

  • ファイル拡張子を見る
  • ファイルの内容を見る

次に、ファイルのMIMEタイプを判別する2つの方法を見てみましょう。

3.1. ファイル拡張子別

MIMEタイプは、拡張子によって決定される場合がありますが、常にそうであるとは限りません。

ファイルに拡張子がないか、間違った拡張子が付いている場合、ファイル拡張子によってMIMEタイプを判別することはできません。 たとえば、JPG画像ファイルの名前をZIPファイル拡張子を持つように変更できます。

3.2. ファイルコンテンツ別

ファイルのMIMEタイプを取得する別の方法は、そのコンテンツを読み取ることです。

ファイルの内容の特定の特性に従って、MIMEタイプを判別できます。 たとえば、JPGは16進署名FF D8で始まり、FFD9で終わります。

これは、余分なI / O作業のため、ファイル拡張子のアプローチよりも遅くなります。 ただし、より信頼性が高くなる可能性があります。

3.3. 2つの方法を組み合わせる

現実の世界では、プログラムは2つの方法を組み合わせてファイルのMIMEタイプを判別することがよくあります。 たとえば、freedesktop.orgによるshared-mime-infoは、MIMEタイプのデータベースを維持し、 GNOME KDEなどの他のプログラムを許可します。 、および Xfce は、このデータベースを使用して、ファイル拡張子またはコンテンツによって対応するMIMEタイプを検索します。

shared-mime-infoで定義されているMIMEタイプ「image/png」の例を見てみましょう。

<?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>

上記では「 image / png 」の例、 タグは、PNGファイルをその内容によって認識するルールを定義します。 しかしタグは、MIMEタイプを決定するためのファイル拡張子を定義します。

4. Linuxコマンドラインツール

それでは、Linuxコマンドラインツールを使用してファイルのMIMEタイプを取得する方法を見てみましょう。 このセクションでは、fileコマンドとxdg-mimeコマンドの2つのユーティリティについて説明します。

4.1. xdg-mimeコマンド

xdg-mime コマンドは、freedesktop.orgのxdg-utilsパッケージのメンバーです。 このパッケージは、デスクトップ環境を備えたほぼすべてのLinuxディストリビューションにプリインストールされています。

xdg-mime コマンドは、shared-mime-infoデータベースを使用してMIMEタイプを判別します。 最初に、ファイル拡張子によってMIMEタイプを認識しようとします。 失敗した場合は、ファイルの内容を調べます。

xdg-mimeコマンドを使用してファイルのMIMEタイプを取得する構文は次のとおりです。

xdg-mime query filetype INPUT_FILE

JPG画像ファイル( onePicture.jpg )を準備し、xdg-mimeコマンドがMIMEタイプを取得できるかどうかを確認しましょう。

$ xdg-mime query filetype onePicture.jpg
image/jpeg

次に、xdg-mimeコマンドを使ってちょっとしたトリックをしてみましょう。 ファイル拡張子を変更して、xdg-mimeコマンドでどのような結果が得られるかを見てみましょう。

$ mv onePicture.jpg onePicture.zip

$ xdg-mime query filetype onePicture.zip
application/zip

おっとっと!  xdg-mime コマンドは、間違ったMIMEタイプを通知します。 これは、 xdg-mime コマンドが最初に、データベース内のファイル拡張子によってMIMEタイプを検索しようとするためです。

それでは、ファイル拡張子を完全に削除して、何が起こるか見てみましょう。

$ mv onePicture.zip onePicture

$ xdg-mime query filetype onePicture
image/jpeg

再び正しい結果が得られます。 これは、 xdg-mime コマンドがファイル拡張子でMIMEタイプを見つけられない場合、ファイルの内容でMIMEタイプを見つけようとするためです。

4.2. ファイルコマンド

FreeBSDやLinuxなどのほとんどの無料のオペレーティングシステムには、デフォルトでfileコマンドが付属しています。 オプション–mime-type を指定してコマンドを使用し、ファイルのMIMEタイプを取得します。

fileコマンドが同じJPGファイルのMIMEタイプを取得できるかどうかを見てみましょう。

$ file --mime-type onePicture.jpg
onePicture.jpg: image/jpeg

次に、ファイル拡張子に同じ変更を加えて、fileが正しい結果を報告できるかどうかを確認しましょう。

$ mv onePicture.jpg onePicture.zip

$ file --mime-type onePicture.zip
onePicture.zip: image/jpeg

すごい! ファイル拡張子を変更してfileコマンドをだまそうとしても、正しいMIMEタイプを伝えることができます。 これは、fileコマンドがファイルのMIMEタイプを判別するためにファイル拡張子に依存しないためです。 代わりに、実際のファイルの内容を調べます。 したがって、この場合の方が信頼性が高くなります。

最後に、ファイル拡張子を削除し、fileコマンドが引き続き正しく機能することを期待します。

$ mv onePicture.zip onePicture

$ file --mime-type onePicture
onePicture: image/jpeg

予想通り、再び正しい結果が得られます。

5. 結論

この記事では、MIMEタイプとは何か、およびMIMEタイプの名前の付け方について説明しました。 次に、LinuxでファイルのMIMEタイプを判別するための一般的なアプローチについて説明しました。

最後に、ファイルのMIMEタイプを取得するための2つのLinuxコマンドfileおよびxdg-mimeコマンドを学習しました。 いくつかの例を通して、2つのコマンドが同じファイルで異なる動作をする理由について説明しました。