ファイルがOSにそのファイル形式を通知する場合、OSはどのアプリケーションをデフォルトで開くかをどのように選択しますか?
Windowsでは、関連付けはレジストリテーブルに保存されますか?
Linuxはファイルを開くアプリケーションをどのように選択するのですか?
以前はNautilusをよく使っていましたが、今度はターミナルに切り替えます。ターミナルで、ファイルを開くアプリケーションを常に明示的に指定する必要があるのは本当ですか?デフォルトで特定の形式のファイルを開くためのアプリケーションの設定は、ファイルマネージャー(Nautilusなど)に属しており、ターミナルに住んでいる場合は問題ありませんか?
これらのデフォルト設定を処理するためのさまざまなメカニズムが存在する場合があります。ただし、他の回答は、それぞれ独自のメカニズムを持つ完全なデスクトップ環境に焦点を当てる傾向があります。ただし、これらは常にシステムにインストールされるわけではありません(私はOpenBoxを頻繁に使用しています)。この場合、xdg-open
などのツールを使用できます。
引用 Arch Wiki :
xdg-openは、ユーザーのデフォルトアプリケーションを構成するためのデスクトップに依存しないツールです。多くのアプリケーションは、xdg-openコマンドを内部的に呼び出します。
現在、Ubuntu(12.04)を使用しており、xdg-open
を利用できます。ただし、GNOMEなどの完全なデスクトップ環境を使用する場合、xdg-open
は単純なフォワーダーとして機能し、ファイルリクエストをDEに中継します。DEは必要に応じて自由に処理できます(GNOMEおよびその他の回答を参照)。ノーチラスなど)。
デスクトップ環境(GNOME、KDE、Xfceなど)内では、xdg-openは単にその引数をそのデスクトップ環境のファイルオープナーアプリケーション(それぞれgvfs-open、kde-open、またはexo-open)に渡します。関連付けはデスクトップ環境に任されています。
...その場合、他の答えに戻ります。それでも、これはUnixとLinuxであり、Ask Ubuntuではありません。
デスクトップ環境が検出されない場合(たとえば、Openboxなどのスタンドアロンウィンドウマネージャーを実行する場合)、xdg-openは独自の構成ファイルを使用します。
概して:
|-- no desktop env. > handle directly.
User Request > xdg-open > --|
|-- desktop env. > pass information to the DE.
最初のケースの場合、xdg-open
コマンドを使用して、 (xdg-mime
を直接設定 する必要があります(これにより、どのアプリケーションがどのファイルを処理することになっているのかを確認することもできます) 。後者の場合...
|-- GNOME? > gvfs-open handles the request.
|
Info. from xdg-open > --|-- KDE? > kde-open handles the request.
|
|-- XFCE? > exo-open handles the request.
...デスクトップ環境に関連付けられたファイルオープナーを設定する必要があります。場合によっては、xdg-mime
を使用して行った構成が、環境内の適切な構成ツールにリダイレクトされることがあります。
wiki エントリから、
KDEやGNOMEなどのLinuxベースのGUIは、MIMEタイプベースの関連付けをサポートしています。たとえば、MIMEタイプtext/plainはテキストエディターに関連付けられます。
また、 this 回答には詳細が記載されています。
ファイルマネージャーはしばしばオプションaとbの組み合わせを使用します(たとえば、最初にファイル拡張子を確認し、不明な場合(またはファイルに拡張子がない場合)、内容を確認します)。
一般的なLinuxファイルシステムでは、ファイルのタイプはメタデータとして保存されません。
this の回答から、以下の情報がわかります。
ファイルマネージャ(デフォルトではNautilus)は、ファイルのMIMEタイプを使用して、どのプログラムで開くかを決定します。アプリケーションがインストールされると、アプリケーションは開くことができるMIMEタイプと、/ usr/share/applicationsに配置されている.desktopファイル内のファイルを開くために使用するコマンドを指定できます。これは、メニュー、デスクトップショートカットなどに使用されるファイルです。
1つの例外を除いて、ファイルはOSにファイル形式を通知しません。
実行可能ファイルがいわゆるシバン行で始まっている場合、
#! /usr/bin/Perl
次に、この行はLinuxカーネルに/usr/bin/Perl
で開始するように指示します(つまり、このファイルを実行する代わりに、usr/bin/Perl
を実行し、このファイルを引数として指定する必要があります)。もちろん、これはそのようなシバン行を無視する(または理解する)ファイル形式でのみ機能します。
それ以外は、オペレーティングシステム自体はファイルタイプについて何も認識していません。ただし、他のファイルを開くことができる多くのプログラムには、どのファイルを開くためにどのプログラムを使用するかを決定する独自のメカニズムがあります。これは、プログラム自体のリストにすることもできます(たとえば、Firefoxがそのようなリストを管理します)。または、プログラムがデスクトップ環境に委任することもできます(Linuxにはいくつかあります)。
通常、これらのメカニズムはファイル名のみを考慮して、ファイルのタイプを決定します。例外は電子メールクライアントとWebブラウザーです。通常、ファイルの種類はサーバーによって明示的に指定され、メールに記載されます。
メカニズムは通常2ステップです。
MS-Windowsと同様に実行されます。
OSでは行いません。これは、ウィンドウシステムの一部であるファイルマネージャーによって行われます。通常、最後のドット.
の後のファイル名の部分が決定を行うために使用されます。設定で、またはファイルを右クリックしたときに設定する方法があります。
したがって、ファイルはOSに通知せず、ファイルはアクティブではないため、それ自体では何もできませんが、ファイルマネージャーはファイル名を確認します。ファイルマネージャーは、file
ユーティリティと同じようにファイル内を確認することもできます。
@richardが言うように、これはWindowsに似ています。一般的なファイルマネージャは、最初にファイルの名前を見て、プログラムに関連付けられているファイル拡張子を認識しようとすることがあります。それが失敗した場合、ファイルを開いてヘッダーを探す可能性があります。非テキストファイル(たとえば、.jpeg)を読み取ろうとすると、ファイルを説明するデータの文字列が表示されます。たとえば、これは私がうそをついていた.jpegの最初の行です。
'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xfe\x00;CREATOR: Gd-jpeg v1.0 (using IJG JPEG v80), quality = 90'
Unixシステムがファイルを処理する方法について、根本的な答えを出そうと思います。他の人が指摘したように、ファイル自体はファイルの種類を報告せず、カーネル自体が使用するアプリケーションを決定しないため、質問の言い回しは誤解を招くものです。
UnixおよびWindowsオペレーティングシステムでは、ファイルは単にバイトのシーケンスとして構成されます。 Tanenbaumのオペレーティングシステム、第3版から:
実際には、オペレーティングシステムはファイルの内容を認識していないか、気にしません。表示されるのはバイトのみです。ユーザーレベルのプログラムでは、どんな意味でも課す必要があります。
これが、デスクトップ環境でxdg-open
は、特定のファイルタイプを開くためのデフォルトアプリケーションを決定するために使用されます。
Unixシステムでは、ファイルは通常のファイルと特殊ファイルに区別されます。通常のファイルは単にテキストファイル(ASCIIまたはUnicodeエンコーディング)またはバイナリ(実行可能コード)のいずれかであるユーザーデータです。特殊ファイルは、OSの実行に不可欠なファイルです。これらには、ディレクトリ、リンク、パイプ、ソケット、およびデバイスファイルが含まれます。 ¹
慣例により、ファイル名には拡張子がどのような種類のファイルであるかを示す拡張子が含まれます(= /// =)。 * .cはCソースコード、*。htmlはWebページなどです。Tanenbaumから:
一部のシステム(UNIXなど)では、ファイル拡張子は単なる規則であり、オペレーティングシステムによって強制されません。 file.txtという名前のファイルは、ある種のテキストファイルである可能性がありますが、その名前は、実際の情報をコンピュータに伝えるよりも、所有者に思い出させるためのものです。一方、Cコンパイラは実際にコンパイルするファイルを.cで終了するように要求する場合があり、そうでない場合はコンパイルを拒否する場合があります。
ファイルが適切な拡張子なしで保存または名前変更された場合でも、そのファイルタイプと同じ形式が保持されます。これは、ほとんどのファイルマネージャがファイルを開くためのアプリケーションを決定する方法であり、拡張子がないと、ほとんどの場合、「このファイルを開くために使用するプログラムを選択してください」というプロンプトが表示されます。
最後に、環境変数は、システム全体およびユーザーレベルの設定を定義するために使用されます。たとえば、変数EDITOR
は、テキストを処理するときに開くテキストエディターを指定するために使用されます。 vim
、nano
など。これは、git
コミットメッセージを編集するときのように、プロセスがどのエディターを開くかを知る方法です。それ以外の場合は、使用するアプリケーションを指定する必要があります。 vim
は、設定がfiletype on
が設定され、正しい構文の強調表示、インデントなどが適用されます。 ²
TL; DR
要約すると、OS自体ではなく、特定のファイルタイプを開くプログラムを決定するのはユーザーレベルのアプリケーションです。