ファイルがオペレーティングシステムにファイルの種類を伝える場合、オペレーティングシステムはそのファイルを開くためにデフォルトで使用するアプリケーションをどのように選択しますか?
Windowsでは、接続はレジストリに保存されますか?
Linuxでファイルを開くアプリケーションを選択するには?
以前はNautilusをたくさん使っていましたが、今ではターミナルを代わりに使用しています。端末でファイルを開くアプリケーションを常に明示的に指定する必要がありますか?特定の形式のファイルを開くときにデフォルトで使用するアプリケーション設定はファイルマネージャ(たとえばNautilus)に属し、端末に住んでいるときに問題になりませんか?
答え1
これらのデフォルト設定を処理するメカニズムはさまざまです。しかし、他の答えはそれぞれ独自のメカニズムを備えた完全なデスクトップ環境に焦点を当てる傾向があります。ただし、これらのツールは必ずしもシステムにインストールされるわけではなく(私は頻繁にOpenBoxを使用しています)、そのような場合はxdg-open
このようなツールを使用できます。
引用するアーチスウィキ:
xdg-openは、ユーザーの基本的なアプリケーションを構成するためのデスクトップに依存しないツールです。多くのアプリケーションは内部的にxdg-openコマンドを呼び出します。
現在私はUbuntu(12.04)を使用しており、動作していxdg-open
ます。ただし、GNOMEなどのフルデスクトップ環境を使用している場合は、xdg-open
単純なフォワーダとして機能し、ファイル要求をDEに渡してから必要に応じて自由に処理できます(GNOMEやNautilusなどの回答を参照)。
デスクトップ環境(GNOME、KDE、Xfceなど)内では、xdg-openはそのデスクトップ環境のファイルを開くアプリケーション(それぞれgvfs-open、kde-open、またはexo-open)に引数を渡します。これは、接続が決定されることを意味します。デスクトップ環境で。
...この場合、別の答えに戻ります。しかし、これはAsk UbuntuではなくUnixとLinuxです。
デスクトップ環境が検出されない場合(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
環境の正しい構成ツールにリダイレクトされることがあります。
答え2
~からウィキペディア入り口、
KDEやGNOMEなどのLinuxベースのGUIは、MIMEタイプベースの接続をサポートしています。たとえば、MIMEタイプのtext / plainはテキストエディタに関連付けられています。
返品、これ答えに詳細があります。
ファイルマネージャはしばしばオプションaとbの組み合わせを使用します(たとえば、ファイル拡張子を見て、不明な場合(またはファイルに拡張子がない場合)、内容を調べます。
ファイル形式は、一般的なLinuxファイルシステムにメタデータとして保存されません。
~からこれ答え、以下のメッセージが表示されます。
ファイルマネージャ(デフォルトではNautilus)は、ファイルのMIMEタイプを使用して、ファイルを開くために使用するプログラムを決定します。アプリケーションがインストールされると、開くことができるMIMEタイプと/usr/share/applicationsにある.desktopファイルからファイルを開くために使用されるコマンドを指定できます。メニュー、デスクトップショートカットなどに使用されるファイルです。
答え3
ファイルは、1つの例外を除いて、オペレーティングシステムにファイルの種類を伝えません。
実行可能ファイルがいわゆるshebang行で始まる場合、たとえば
#! /usr/bin/perl
この行はLinuxカーネルで起動する必要があることを示します/usr/bin/perl
(つまり、usr/bin/perl
このファイルを実行するのではなく、このファイルを実行して引数として提供する必要があります)。もちろん、これはそのようなシャーバンラインを無視(または理解)するファイル形式でのみ機能します。
それに加えて、オペレーティングシステム自体はファイル形式について何も知りません。しかし、他のファイルを開くことを可能にする多くのプログラムには、どのファイルを開くために使用するプログラムを決定する独自のメカニズムがあります。これはプログラム自体の内部のリストにすることができます(Firefoxはこれらのリストを維持します)。あるいは、プログラムがそれをデスクトップ環境に委任することもできます(これらのタスクのいくつかはLinuxで動作します)。
通常、これらのメカニズムはファイルの種類を決定するためにファイル名のみを考慮します。電子メールクライアントとWebブラウザは例外です。ここで、ファイルタイプは通常、サーバーによって明示的に提供されるか、メッセージに指定されます。
メカニズムは通常2つの段階に分けられます。
- まず、ファイルのMIMEタイプ(MIMEタイプは標準化されているが拡張可能なファイルタイプのリスト)は、ファイル名または提供された情報に基づいて決定されます。
- 第2に、MIMEタイプによって実行すべきプログラムが決定される。通常、プログラム自体、またはプログラムが作成されたデスクトップ環境で維持する一種のレジストリによって決定されます。
答え4
私はUnixシステムがファイルを処理する方法についての基本的な答えを提供しようとします。他の人が指摘したように、ファイル自体がそのタイプを報告せず、カーネル自体がどのアプリケーションが使用されるかを決定しないため、質問の表現は誤解を招く可能性があります。
UnixおよびWindowsオペレーティングシステムでは、ファイル構造は単にバイトシーケンスです。タネンバウムからオペレーティングシステム、3番目のバージョン:
実際、オペレーティングシステムはファイルの内容を知らないし、気にしない。見えるのはバイトだけです。すべての意味はユーザーレベルのプログラムによって与えられるべきです。
これが、デスクトップ環境でxdg-open
特定のファイル形式を開くための基本的なアプリケーションを決定するために使用される理由です。
Unixシステムでは、ファイルパーティションは次のように分割されます。一般ファイルそして特殊ファイル。通常のファイルは単純なユーザーデータであり、テキストファイル(ASCIIまたはUnicodeエンコーディング)またはバイナリファイル(実行コード)です。特殊ファイルは、オペレーティングシステムを実行するために必要なファイルです。これには、ディレクトリ、リンク、パイプ、ソケット、およびデバイスファイルが含まれます。^
通常、ファイル名にはファイルの種類を表す拡張子が含まれます。可能たとえば、*.cはCソースコードを表し、*.htmlはWebページなどを表します。タネンバウムから:
UNIXなどの一部のシステムでは、ファイル拡張子は単なるルールであり、オペレーティングシステムでは実行されません。 file.txtという名前のファイルは一種のテキストファイルである可能性がありますが、名前は実際の情報をコンピュータに渡すのではなく、所有者に思い出させるのに役立ちます。一方、Cコンパイラは、実際にコンパイルするファイルが.cで終わる必要があると主張することができます。そうしないと、コンパイルを拒否する可能性があります。
正しい拡張子なしでファイルを保存または名前を変更すると、そのファイル形式と同じ形式が維持されます。これは、ほとんどのファイルマネージャがファイルを開くために使用するアプリケーションを決定する方法です。 。
最後に、環境変数はシステム全体とユーザーレベルの設定を定義するために使用されます。たとえば、この変数EDITOR
は、テキスト操作(例:など)を実行するときに列テキストエディタを指定するために使用されます。vim
これは、たとえば、コミットメッセージnano
を編集するときにプロセスが開く必要があるエディタを知る方法です。git
それ以外の場合は、どのアプリケーションを使用するかを指定する必要があります。これが正しいです。vim
設定されている場合は、拡張子を確認してファイルの内容を確認し、正しい構文のfiletype on
強調、インデントなどを適用してファイルの種類を検出します。²
長い話を短く
つまり、オペレーティングシステム自体ではなく、特定のファイル形式を開くために使用するプログラムを決定するのはユーザーレベルのアプリケーションです。