Linux(たとえばDebian / Gnu Linux)にアプリケーションをインストールすると、そのアプリケーションのファイルがファイルシステムのさまざまなディレクトリにコピーされます。
いくつかのスクリプトが入ります/usr/共有../usr/ローカル他のファイル/var../ログ..など/など。
私にとっては、ファイルシステムについて少し学び、ほとんどのディレクトリには特定の目的のためのファイルが保存されているので、それは重要ではありませんでした。これは、「1つのことをしてそれをうまくやる」というUnixの哲学と非常に一致しています。
しかし、私の質問はこれらのディレクトリ構造の利点は何ですか?あるいは、単に昔のUnix時代の遺物かもしれません。 (例:すべてのアプリケーションのファイルが特定の「フォルダ」内の単一ウィンドウの使用と比較)
答え1
どんな組織を選んでも、どんな仕事も簡単になり、どんな仕事も難しくなります。
Unix方式(bin
、、、、...)でファイルを種類別に整理すると、ファイル操作が簡単になりますman
。lib/python
コマンドを実行したい場合は、どのパッケージが提供していても、そのコマンドが見つかる場所を知ることができます。文書を検索したい場合は、すべてが1か所にあります。プログラムがVim構文強調モジュール、zsh補完、またはPythonバインディングを提供している場合、関連ファイルはvim / zsh / pythonにある場所にあります。
Unixはまた、使用パターンに従ってファイルを整理します。設定ファイルが入力され/etc
、通常動作中に変更されないファイルが入力され/usr
、自動的に変更されるファイルが入力されます/var
。ユーザーデータは保護されています/home
。これは、構成管理(構成内容/etc
およびインストール済みパッケージリストの管理)に役立ちます。バックアップ戦略を定義することも便利です。その内容は/etc
非常に重要であり、/home
その内容は/usr
簡単に再ダウンロードできます。
Unixアプローチの主なコストは、複数のディレクトリに分散ソフトウェアをインストールすることです。しかし、最新のUNIXシステムにはとにかくパッケージマネージャがあります。多くのディレクトリ内のファイルを管理することは決して最も複雑な作業ではありません(依存関係を追跡するのは非常に便利ですが、はるかに困難です)。
Windowsと比較してみてください。 Windowsはパッケージ管理なしで起動し、各アプリケーションはどこかに独自のディレクトリを作成しました。プログラム、静的データ、ユーザーデータなど、すべてのファイルは通常そのディレクトリにあります。ただし、時々プログラムは、競合するライブラリ(「DLL地獄」)に関係なく、共通のシステムディレクトリに配置されます。時間が経つにつれて、Windowsはマルチユーザーになり、システムディレクトリからユーザーディレクトリを分離する必要がありました。 Windowsはまた、設定ファイル(Unix用/etc
)と一部のシステムデータ(Unix用)の中央の場所で/var
あるレジストリを作成します。これは主にパッケージ管理が不足しており、シングルユーザーシステムとしての初期記録がないため、歴史的な遺物に近い。 Windows のアプローチにはいくつかの制限があります。つまり、ソフトウェアパッケージが簡単にやり取りすることはできません。たとえば、インストールされているソフトウェアのほとんどはデフォルトのコマンド検索パスには表示されないため、どのようなスクリプトでも正しく動作しません。インストーラは通常、特別な場合としてメニューアイコンを提供します。これは別のシステムディレクトリ(Unixに似ています)に配置されます。
Unixアプローチの1つの制限は、複数のバージョンのパッケージが簡単に共存できないことです。これは、パッケージをアップグレードするときに特に問題になります。 2つの利点を最大限に活用する方法は、各パッケージを独自のディレクトリ/opt
に展開し、パッケージディレクトリから構造へのシンボリックリンクフォレストを作成することです/usr
。ソフトウェアとはまさにこれです。お店する。
要約すると、Unix アプローチを使用すると、ファイルの操作、管理、およびパッケージのやりとりが容易になりますが、とにかくこれが優れています。 Windowsアプローチでは、パッケージを手動で管理するのが簡単ですが、便利な機能を得るにはUnixモデルに移動する必要があります。
答え2
私の考えに最も簡単に浮かぶ利点は、同じファイルが同じディレクトリツリーにあることです。構成ファイルはにあり/etc
、ログファイルおよび/またはランタイムトレースファイルはにあり/var/log
、実行可能ファイルはにあり/usr/bin
、ランタイム情報(PIDファイルなど)はにあります/var/run
。 NTP設定ファイルに何があるのか知りたいですか?一部のプログラムが実行可能ファイルを監視して、既存のファイルシステムウイルスが/etc
感染ls ntp*
しないようにしますか?すべてが内部にあるので/usr/bin
観察する/usr/local/bin
必要があります。
私が考える2番目の利点は、Unixスタイルの設定がデータと実行可能ファイルの分離を促進することです。実行可能ファイルは、テンプレートがある場所(/usr/share
おそらく)とデータがある場所から離れたディレクトリにあります。これらの分離は、Unix/Linux/*BSD が Windows や以前の Pre-OSX Mac よりもファイルシステムのウイルスに強い理由である可能性があります。
答え3
上記の主な利点の1つとこの構造の歴史的な理由は、ブートプロセスのさまざまな段階で利用可能な複数のボリューム/ディスクを物理的に分離することです。
もう1つの利点は、ディレクトリデータに最適化されたボリューム/ファイルシステムにさまざまなディレクトリをマウントできることです。例えばtmpfs
;/run
および/sbin
読み取り専用メディア/ROMの場合。
さらに、ボリュームはローカルまたはリモート、個人、または共有にすることができます。
最後に、参照アプリケーションカタログUNIX(OS X .app
) の場合 Linux(ROXデスクトップ)とWindows(ポータブルアプリケーションウェブサイト)。
答え4
アプリケーションの共有ファイルと構成ファイルがどこにあるかを推測しやすいことを除いて、このレイアウトには実際には利点はありません。 UNIXは長い間このレイアウトを維持してきました。これを破ることは非常に困難です。しかし、一部のUNIXディストリビューションはモデルを変更しました。これは従来の目的でのみ古い場所を提供しますが、他のアプリケーションは独自の小さなディレクトリ/パッケージにバンドルされています。 Mac OSプログラム)))。
ファイルシステムルールが提供する最も重要なのは、人々がファイルを見つける場所(手動またはコード)を知ることを可能にするルールです。 1つの方法が他の方法よりも優れた実際の技術的な理由はありません。