Unixシステムがどのようにファイルを処理するかについて、根本的な答えをしようとします。他の人が指摘しているように、ファイル自体はファイルの種類を報告せず、カーネル自体が使用するアプリケーションを決定しないため、質問の表現は誤解を招く可能性があります。
UnixおよびWindowsオペレーティングシステムでは、ファイルは単純に一連のバイトとして構造化されます。Tanenbaumのオペレーティングシステム、第3版から:
実際、オペレーティングシステムはファイルの内容を認識したり、気にしたりしません。表示されるのはすべてバイトです。すべての意味は、ユーザーレベルのプログラムによって課される必要があります。
これが、デスクトップ環境でxdg-open
特定のファイルタイプを開くためのデフォルトのアプリケーションを決定するために使用される理由です。
Unixシステムでは、ファイルは通常ファイルと特殊ファイルに区別されます。通常のファイルは、テキストファイル(ASCIIまたはUnicodeエンコード)またはバイナリ(実行可能コード)のいずれかである可能性がある単なるユーザーデータです。特殊ファイルは、OSを実行するために不可欠なファイルです。これらには、ディレクトリ、リンク、パイプ、ソケット、およびデバイスファイルが含まれます。¹
これは、ファイル名は、彼らがファイルの種類を示すための拡張機能が含まれていることを慣例であることがあることなど* Cのソースコード、タネンバウム等からWebページのための* .htmlのため.C:
一部のシステム(UNIXなど)では、ファイル拡張子は単なる規則であり、オペレーティングシステムによって強制されません。file.txtという名前のファイルは何らかのテキストファイルかもしれませんが、その名前は実際の情報をコンピューターに伝えるよりも所有者に思い出させるためのものです。一方、Cコンパイラは、実際にコンパイルするファイルが.cで終わると主張し、そうでない場合はコンパイルを拒否する場合があります。
ファイルが適切な拡張子なしで保存または名前変更された場合、そのファイルタイプに対して同じ形式が保持されます。これは、ほとんどのファイルマネージャーがどのアプリケーションでファイルを開くかを決定する方法であり、拡張子がない場合、「このファイルを開くために使用するプログラムを選択してください」というメッセージがユーザーに表示されます。
最後に、環境変数を使用して、システム全体およびユーザーレベルの設定を定義します。例えば、変数はEDITOR
、テキストなどを扱うときに開くためにどのテキストエディタを指定するために使用されるvim
、nano
など、これは、プロセスが編集しているときのように、オープンにどのエディタを知る方法ですgit
コミットメッセージを。それ以外の場合は、使用するアプリケーションを指定する必要があることは正しいです。vim
設定filetype on
が設定されている場合は、拡張子をチェックし、ファイルの内容を検査することでファイルの種類を検出し、正しい構文の強調表示、インデントなどを適用します。²
TL; DR
要約すると、特定の種類のファイルを開くプログラムを決定するのはユーザーレベルのアプリケーションであり、OS自体ではありません。