Linuxがファイル拡張子とは関係がないにもかかわらず、ファイル拡張子を使用してファイルを開く基本プログラムを決定する理由

Linuxがファイル拡張子とは関係がないにもかかわらず、ファイル拡張子を使用してファイルを開く基本プログラムを決定する理由

テキストファイルがあります。abc.text内容は次のとおりです。Hi I'm a text file.

ファイルをダブルクリックして開くと、geditエディタで開きます。

ただし、ファイル名を次のように変更するとabc.html(コンテンツを変更せずに)、デフォルトでChromeで開きます。

Windowsはファイル拡張子を使用してファイルの種類を識別するため、この動作はWindowsコンピュータで許可されています。しかし、私が知っている限り、Linuxにはファイル拡張子は必要ありません。

それでは、Linuxでファイル拡張子を変更すると、ファイルを開く基本プログラムが変更されるのはなぜですか?

答え1

Linuxはファイル拡張子を使用してファイルを開く方法を決定しませんが、Linuxはファイル拡張子を使用してファイルを開く方法を決定します。

ここでの問題は、「Linux」がオペレーティングシステムの他の部分を指定でき、「ファイルを開く」も異なる意味を持つことができるということです。

LinuxとWindowsの違いは、アプリケーションファイルとデータファイルを処理する方法です。 Windowsでは、2つの間の境界がぼやけています。拡張子(.exeなど.bat)によって決まるさまざまな種類の実行可能ファイルがありますが、ほとんどの場合、すべてのファイルを「実行」することができます(たとえば、エクスプローラでクリック)、このファイルタイプが使用されます。関連する実行可能ファイルによって、ファイルの種類は完全に拡張子によって決まります(したがって実行可能ファイルが起動され、実行可能ファイルが.docPythonc:\Program Files\something or other\winword.exeインタプリタ.pyを起動できるなど)。

Linuxには、ファイル名とは無関係の実行可能ファイルという概念があります。実行ファイルは通常ユーザーが入力するため、拡張子はありません。ファイル形式は重要ではありません。ユーザーはファイルを実行するだけです。カーネルは内容によってファイルの実行方法を決定します。いくつかのファイル形式を基本的に知っていますシェルボーンメカニズムにより、ファイルは別の実行可能ファイルをソルバーとして宣言できます。

一方、データファイルには通常、データ型を表す拡張子があります。ここで一般的なアイデアは、データ型がファイルを開くために使用されたアプリケーションと同義ではないということです。 Okular、Evince、Xpdf、Acroread、MupdfなどでPDFを表示できます。

ただし、使用するアプリケーションを明示的に指定しなくてもデータファイルを開くことができるツールがたくさんあります。これらのツールはほぼ完全にファイル拡張子に基づいて決定を下します。ファイル拡張子とファイルの内容は、これらのツールが使用できる唯一の情報です。 Linux はファイル形式に関するメタ情報を保存しません。したがって、.pdfファイルマネージャでファイルをクリックすると(または.pdf適切に設定されたzshコマンドラインからファイルを実行している場合など)、ファイルマネージャはデータベースを参照してファイルのデフォルトアプリケーションを見つけます.pdf。データベースは2つの部分に分けることができます。 1つは拡張子をMIMEタイプ(/etc/mime.types~/.local/share/mime)に関連付ける部分、もう1つはMIMEタイプをアプリケーション(/etc/mailcap、、~/.local/share/applications)、しかしその場合でも、原点は拡張です。通常、ファイルの内容からアプリケーションを把握することは可能ですが、遅くて常に可能なわけではありません(多くの形式がテキストファイルのように見え、aはファイル.jarタイプ.zipなどです)。

Linux いいえ必要ファイル拡張子は、実行可能ファイルの実行方法を決定するために使用されませんが、データファイルを開くために使用するプログラムを決定するために使用されます。

¹ファイルはデフォルトの実行可能ファイルでなければならず、shebang実行可能ファイルは潜在的な無限の再帰を防ぐために他のshebang実行可能ファイルを指すことはできません。

答え2

デスクトップ環境には、ファイルブラウザでファイルを選択するときにどのファイルを開くために使用するアプリケーションを決定する独自のメカニズムがあります。これは、基本的なUnixoidオペレーティングシステムとは何の関係もありません。この場合、Linux(カーネルとコアライブラリとユーティリティを意味します)はまだ拡張とは関係ありません。

このメカニズムは通常、ユーザーの利便性と次の目的のための拡張に基づいています。最小限の驚きのルール。 MIMEタイプは、ここで共通のコンテンツタイプに複数の拡張子(たとえばなど)を割り当てるために使用される抽象化にすぎず.htm、ファイルで必要な/実行できる操作を決定するために使用されます。したがって、デスクトップ設定でMIMEタイプに拡張子を割り当て、各タイプのファイルを開くために使用されるアプリケーションを選択できます。.html.HTML

ただし、実行可能ファイルの場合、以前のDOSでは、オペレーティングシステムが3種類のファイルしか実行できず、拡張子:、、.batとして.com解釈する方法を決定しました.exe。この時代はずっと前に進み、他のオペレーティングシステム(Unixやすべてのサブバージョンなど)はこれらの微妙なメカニズムに頼っていませんでしたが、ファイルを実行するかどうかを決定する他の方法が常にありました。

これ習慣拡張機能の使用は有用で拡張されており、まだ使用されていますが、オペレーティングシステムの目的ではなく、ユーザーの便宜のために見る必要はありません。入力するsomething.sh埋め込みコンテンツを検索するための名前付きファイル。しかし、オペレーティングシステムはこれに依存しません。ただし、アプリケーションは次のことができます。スクリプトは常に次のことを行います。

for file in *.html; do ...

答え3

他の人が答えたように、特定のファイルを開くために使用するプログラムを選択することはプログラム(シェル)によって異なります。

しかし、選択をするのは拡張子だけではありません。通常、フォーマットを識別するファイルの先頭に署名があります。 [これはUNIX派生型だけでなく、ほぼすべてのバイナリプログラムで共通です]。このプログラムfile(およびそのデータベース)は、ファイル形式を復号化するための基本的なソースです。

関連情報