web-dev-qa-db-ja.com

MIMEタイプとFile .extensionsの関係は何ですか?

ここで間違った考えを持っているかもしれませんが、私はそれを考えました:

MIMEタイプは識別コード、埋め込み内部ファイルです。
File .extensionsは、ファイルのnameに接尾辞が付いた識別コードです。

薄暗い暗黒時代に聞いたものから、Linuxは.extensionに依存しないと思っていました...(多分それは初期の頃だったので、それから状況は変わったのでしょうか...?)

私は最近、Windowsの世界から来ました。そこでは、オペレーティングシステムレベルで、ファイル.extensionが(私の知る限り)関連するアプリケーションプログラムに関連付ける唯一の方法です。

whyがわからないので、 "fred"という名前のファイルand "fred.txt"という名前のファイルが両方ともテキストで開くことを少し混乱させる編集者。

ここには明確な階層がありますか?

19
Peter.O

MIMEタイプは、タイプに名前を付けるための単なる方法です。ファイルのタイプがどのように決定されるかには関係ありません。

ファイルの種類を判断するには、2つの方法があります。a)拡張子を見て、正確であることを期待するか、b)ファイルの内容を見て、それに基づいて推測します。ファイルに拡張子がない場合は、bのみがオプションです。

多くの(バイナリ)ファイル形式には、タイプを判別するために確認できる特定のヘッダーがあります。これにより、これらのタイプに対してオプションbの信頼性が非常に高くなります。

プレーンテキストファイル形式は、多くの場合、その構造によって決まります(ファイルに多くのhtmlタグが含まれている場合は、おそらくhtmlファイルです)。

UNIXおよびLinuxシステムでは、fileコマンドラインユーティリティを使用して、その内容に基づいてファイルのタイプを調べることができます。

ファイルマネージャーは、オプションaとbの組み合わせを使用することがよくあります(たとえば、最初にファイル拡張子を調べ、不明な場合(またはファイルに拡張子がない場合)、内容を調べます)。

ファイルのタイプは、一般的なLinuxファイルシステムにメタデータとして保存されません。

15
sepp2k

Linuxでは、ファイル拡張子はファイル名の一部であり、実際にはオペレーティングシステムにとって何の意味もありません。 MIMEタイプは、ファイルの内容の説明です。 fredfred.txtの両方のMIMEタイプはtext/plainになります。

Nautilusなどのファイルマネージャは、このMIMEタイプを使用して、ファイルを開くプログラムを認識します。ターミナルでは、xdg-openコマンドも同じことを行います。ただし、これはユーザー空間レベルであり、オペレーティングシステムレベルではありません。

ファイルには実際にはこのMIMEタイプは含まれていませんが、ファイルを開くプログラムはさまざまな方法を使用してこのMIMEタイプを特定します。ファイル拡張子のみに依存するものもありますが、ほとんどはファイルの先頭でデータを調べるなどの手法を組み合わせて使用​​します。

ファイルの先頭にASCII文字として表現できるバイトのみが含まれている場合は、テキストファイルであると想定しても安全です。拡張子が.htmlのようなものである場合、プログラムはそれがHTMLページであると想定し、Webブラウザーで開きます。同じことがバイナリファイル形式でも機能します。たとえば、ビットマップファイル形式は、ASCIIの「BMP」で始まり、その後に画像を表すバイナリデータが続くことを知っています。

簡単に言えば、Linuxプログラムは、ファイル内のデータとそのファイル拡張子に基づいて、経験に基づいた推測を行います。これは非常に信頼できるとは思えないかもしれませんが、使用されるアルゴリズムは、私が説明した例よりも複雑で、実際に正確です。

14
dv3500ea

Linuxの世界では、ファイル拡張子はファイルの種類を示す1つの指標にすぎません。ファイルのタイプを推測する「ファイル」と呼ばれるコマンドラインツールがあります。

このタイプを取得するには、主に3つのインジケーターがあります。

  • 拡張子
  • ファイルシステムの特別な属性(シンボリックリンクまたはハードリンク、フォルダー、入力デバイスなど)
  • コンテンツ
    • バイナリ(実行可能ファイルのELF情報など)
    • テキスト(<html>#!/bin/bashなど)

ファイルタイプとMIMEタイプの関係は、MIMEはファイルのタイプを表す標準(text/cssなど)にすぎないということです。

Linuxはファイルタイプを「推測」し、そのタイプに関連付けられたプログラムを開きます。

5
Lincoln