Linuxはファイルを開くアプリケーションをどのように選択しますか?


38

ファイルがOSにファイル形式を伝える場合、OSはどのアプリケーションをデフォルトで開くかをどのように選択しますか?

Windowsでは、関連付けはレジストリテーブルに保存されますか?

Linuxはファイルを開くアプリケーションをどのように選択しますか?

以前はNautilusをよく使用していましたが、今はターミナルに切り替えます。ターミナルでは、ファイルを開くアプリケーションを常に明示的に指定する必要がありますか?デフォルトで特定の形式のファイルを開くアプリケーションの設定は、ファイルマネージャー(Nautilusなど)に属しており、ターミナルに住んでいるときは問題になりませんか?


24
Linuxは単なるOSカーネルです。ここでは、デスクトップ環境またはファイルマネージャーを意味すると思います。おそらく)KDE、Gnomeの、XFCE ...または他のを実行しているのAndroid、ChromeOSの、Linuxの(または非Linux)の塩基のOS上で異なることになるだろうこと
ステファンChazelas

多分。どちらが仕事をするのかわかりません。私はgnomeを使用していますが、一般についても知りたいです。
ティム14

次に、OSとデスクトップの環境とアプリケーションを明確にします。「ユニティ」デスクトップを備えたUbuntu 12.04のnautilusのように。
ステファンシャゼル14

(1)私はUbuntu 12.04の下にいます。私のデスクトップはGnomeまたは「Unity」ですか?(2)以前はNautilusをよく使用していましたが、今はターミナルに切り替えます。ターミナルでは、ファイルを開くアプリケーションを常に明示的に指定する必要がありますか?デフォルトで特定の形式のファイルを開くアプリケーションの設定は、ファイルマネージャー(Nautilusなど)に属しており、ターミナルに住んでいるときは問題になりませんか?
ティム14

回答:


35

これらのデフォルト設定を処理するためのさまざまなメカニズムがあります。ただし、他の答えは、それぞれが独自のメカニズムを持つ完全なデスクトップ環境に焦点を当てる傾向があります。しかし、これらは常にシステムにインストールされているわけではなく(OpenBoxを頻繁に使用しています)、この場合はなどのツールxdg-openが使用される場合があります。

Arch Wikiの引用:

xdg-openは、ユーザーのデフォルトアプリケーションを設定するためのデスクトップに依存しないツールです。多くのアプリケーションは、内部でxdg-openコマンドを呼び出します。

現時点では、Ubuntu(12.04)をxdg-open使用しており、利用可能です。ただし、GNOMEなどの完全なデスクトップ環境を使用する場合はxdg-open、単純なフォワーダーとして機能し、ファイルリクエストをDEに中継します。DEは必要に応じて自由に処理できます(たとえば、GNOMEおよびNautilusの他の回答を参照) 。

デスクトップ環境(GNOME、KDE、Xfceなど)内では、xdg-openは単にデスクトップ環境のファイルオープナーアプリケーション(それぞれgvfs-open、kde-open、またはexo-open)に引数を渡します。つまり、関連付けはデスクトップ環境に任されています。

...その場合、他の答えに戻ります。それでも、これはUnixとLinuxであり、Ubuntuに尋ねないためです。

デスクトップ環境が検出されない場合(たとえば、Openboxなどのスタンドアロンウィンドウマネージャーを実行する場合)、xdg-openは独自の構成ファイルを使用します。

概して:

                            |-- no desktop env. > handle directly.
User Request > xdg-open > --|
                            |-- desktop env.    > pass information to the DE.

前者の場合、コマンドを使用して直接構成xdg-openする必要がありますxdg-mime(これにより、どのアプリケーションがどのファイルを処理するかを確認することもできます)。2番目の場合...

                        |-- GNOME? > gvfs-open handles the request.
                        |
Info. from xdg-open > --|-- KDE?   > kde-open handles the request.
                        |
                        |-- XFCE?  > exo-open handles the request.

...デスクトップ環境に関連付けられたファイルオープナーを設定する必要があります。場合によっては、実行した構成がxdg-mime環境内の適切な構成ツールにリダイレクトされる場合があります。


11
理想的な世界では、GnomeとKDEはxdg設定を使用してファイルを開くアプリを選択し、xdgオプションを変更するUIを提供します。その後、各DEに1つではなく、設定データベースを1つだけ持つことができます。残念ながらxdgは遅すぎたようです。
joeytwiddle

2
理想的な世界では、3つのDEはありません。
ラッセルボロゴーブ14

1
@RussellBorogove-その後、すべてWindowsに移行する必要があります。それは理想的な世界です。
-don_crissti

@don_crisstiこれは「開発者や管理者にとって理想的」という意味だったと思います。エンドユーザーに多様性を提供することは素晴らしいことですが、デザイナーが単一のシステムに集中することは実際にははるかに簡単です(必ずしも「より良い」とは限りません)。xdg-openは、両端を結び付けようとするこれらのコンポーネントの1つにすぎません。
ジョンWHスミス

1
@John-管理者とさまざまなアプリの開発者/設計者について:同意しました...しかし、その後、上流の開発者はそんなことしかできません。理想的な世界では、これまたはそれについて文句を言う代わりに、KDE、Gnomeなどのアップストリームプロジェクトに貢献して、DE間の使いやすさと相互運用性を改善します。私たち全員(数百万人)がわずかな努力を払えば、これらすべての問題は数日で解決するでしょう。
-don_crissti

11

wikiエントリから、

KDEやGNOMEなどのLinuxベースのGUIは、MIMEタイプベースの関連付けをサポートしています。たとえば、MIMEタイプtext / plainはテキストエディターに関連付けられます。

また、この回答には詳細があります。

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

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

この回答から、以下の情報が表示されます。

ファイルマネージャ(デフォルトではNautilus)は、ファイルのMIMEタイプを使用して、どのプログラムでファイルを開くかを決定します。アプリケーションをインストールすると、開くことのできるMIMEタイプと、/ usr / share / applicationsにある.desktopファイル内のファイルを開くために使用するコマンドを指定できます。これは、メニュー、デスクトップショートカットなどに使用されるファイルです。


1
私の質問は「ファイルの形式タイプを指定する」ことで、ファイルを開くアプリケーションを決定します。
ティム14

11

ファイルはOSにそのファイル形式を伝えませんが、1つの例外があります。

実行ファイルが次のようないわゆるシェバン行で始まる場合

#! /usr/bin/perl

次に、この行はLinuxカーネルに起動するように指示します/usr/bin/perl(つまり、このファイルを実行する代わりに、このファイルを実行usr/bin/perlして引数としてこのファイルを指定する必要があります)。もちろん、これはそのようなシバン行を無視する(または理解する)ファイル形式でのみ機能します。

それ以外は、オペレーティングシステム自体はファイルの種類について何も知りません。ただし、他のファイルを開くことができる多くのプログラムには、どのファイルを開くためにどのプログラムを使用するかを決定する独自のメカニズムがあります。これは、プログラム自体の内部のリスト(たとえば、Firefoxがそのようなリストを保持している)であるか、プログラムがそれをデスクトップ環境(Linux用にいくつかあります)に委任できます。

通常、これらのメカニズムはファイル名のみを考慮して、ファイルのタイプを決定します。例外は電子メールクライアントとWebブラウザーです。通常、ファイルの種類はサーバーによって明示的に指定され、メールに記載されます。

メカニズムは通常2段階です。

  • まず、ファイル名または提供された情報から、ファイルのMIMEタイプを決定します(MIMEタイプは標準化されていますが、拡張可能なファイルタイプのリストです)。
  • 次に、MIMEタイプから、実行するプログラムを決定します。通常は、プログラム自体またはプログラムが作成されたデスクトップ環境のいずれかによって保持されている一種のレジストリを使用します。

ありがとう。ターミナルでは、ファイルを開くアプリケーションを明示的に指定する必要があるのは本当ですか(shebangを含むスクリプトを除く)?デフォルトで特定の形式のファイルを開くアプリケーションの設定は、ファイルマネージャー(Nautilusなど)に属しますが、ターミナルに住んでいるときは問題になりませんか?
ティム14

コマンドラインからGnomeアソシエーションを使用する場合は、コマンドを使用できますgnome-open。他のデスクトップ環境にも同様のコマンドラインツールがあるはずです。編集: John WH Smithがデスクトップ環境から独立したコマンドを提供することに注意してください。
celtschk 14

6
修正:シェバン行はカーネルへのメッセージではありません。これはシェルへのメッセージです。
カザーク14


2
そのリンクされたページの実際のコードへのリンクは現在機能していないようですので、シバン行を処理するカーネルコードへの別のリンクがあります:lxr.free-electrons.com/source/fs/binfmt_script.c-もちろん自分でカーネルソースをインストールして、ファイルを調べてください。
celtschk 14

4

MS-Windowsと同様に行われます。

OSによって実行されません。これは、ウィンドウシステムの一部であるファイルマネージャーによって行われます。通常、最後のドットの後のファイル名の部分が.決定に使用されます。設定で設定する方法、またはファイルを右クリックする方法があります。

そのため、ファイルはOSに通知せず、ファイルはアクティブではないため、それ自体では何もできませんが、ファイルマネージャーはファイル名を確認し、ファイルマネージャーはfileユーティリティと同じようにファイル内を確認することもできます。


おそらく、Windowsでは、ファイルマネージャー自体では行われません。どのアプリケーションもを呼び出すことができshell32!ShellExecute()、shell32はWindows Shellの一部ですがデフォルトのファイルマネージャーであるWindows Explorerの一部ではありません。
ルスラン14

3

@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'


2
一部のファイルマネージャーは、ファイル名拡張子の前にファイルの内容を分析します(おそらく、拡張子を常に無視することもあります)。たとえば、KDEのDolphinで、ブラウザに関連付けられたGIF画像と画像ビューア付きのPNGがある場合、file.pngPNGファイルの名前を変更しても画像ビューアfile.gifが開きます。ファイルを空にすると、テキストエディターで開きます。
ルスラン14

3

Unixシステムがどのようにファイルを処理するかについて、根本的な答えをしようとします。他の人が指摘しているように、ファイル自体はファイルの種類を報告せず、カーネル自体が使用するアプリケーションを決定しないため、質問の表現は誤解を招く可能性があります。

UnixおよびWindowsオペレーティングシステムでは、ファイルは単純に一連のバイトとして構造化されます。Tanenbaumのオペレーティングシステム、第3版から:

実際、オペレーティングシステムはファイルの内容を認識したり、気にしたりしません。表示されるのはすべてバイトです。すべての意味は、ユーザーレベルのプログラムによって課される必要があります。

これが、デスクトップ環境でxdg-open特定のファイルタイプを開くためのデフォルトのアプリケーションを決定するために使用される理由です。

Unixシステムでは、ファイルは通常ファイル特殊ファイルに区別されます。通常のファイルは、テキストファイル(ASCIIまたはUnicodeエンコード)またはバイナリ(実行可能コード)のいずれかである可能性がある単なるユーザーデータです。特殊ファイルは、OSを実行するために不可欠なファイルです。これらには、ディレクトリ、リンク、パイプ、ソケット、およびデバイスファイルが含まれます。¹

これは、ファイル名は、彼らがファイルの種類を示すための拡張機能が含まれていることを慣例であることがあることなど* Cのソースコード、タネンバウム等からWebページのための* .htmlのため.C:

一部のシステム(UNIXなど)では、ファイル拡張子は単なる規則であり、オペレーティングシステムによって強制されません。file.txtという名前のファイルは何らかのテキストファイルかもしれませんが、その名前は実際の情報をコンピューターに伝えるよりも所有者に思い出させるためのものです。一方、Cコンパイラは、実際にコンパイルするファイルが.cで終わると主張し、そうでない場合はコンパイルを拒否する場合があります。

ファイルが適切な拡張子なしで保存または名前変更された場合、そのファイルタイプに対して同じ形式が保持されます。これは、ほとんどのファイルマネージャーがどのアプリケーションでファイルを開くかを決定する方法であり、拡張子がない場合、「このファイルを開くために使用するプログラムを選択してください」というメッセージがユーザーに表示されます。

最後に、環境変数を使用して、システム全体およびユーザーレベルの設定を定義します。例えば、変数はEDITOR、テキストなどを扱うときに開くためにどのテキストエディタを指定するために使用されるvimnanoなど、これは、プロセスが編集しているときのように、オープンにどのエディタを知る方法ですgitコミットメッセージを。それ以外の場合は、使用するアプリケーションを指定する必要があることは正しいです。vim設定filetype onが設定されている場合は、拡張子をチェックし、ファイルの内容を検査することでファイルの種類を検出し、正しい構文の強調表示、インデントなどを適用します。²

TL; DR

要約すると、特定の種類のファイルを開くプログラムを決定するのはユーザーレベルのアプリケーションであり、OS自体ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.