私はLinuxサーバーを何年も使用していますが、ファイルシステム階層標準に混乱し続けています。通常、私は混乱して生きることができます。しかし、Linux用に独自のソフトウェアを開発しているので、パッケージマネージャーによってインストールされる場所を理解する必要があります。
/ optが私のアプリケーションに最適な場所であると私はかなり確信していました。しかし、私のDebianファイルシステムを調査した後、私はもうわかりません:多くのソフトウェアが実際に/ usr/libにインストールされています!いくつか例を挙げると、MySQL、MySQLWorkbench、Nautilus、Rythmbox ...
FHSによると、/ usr/libには「プログラミングおよびパッケージ用のライブラリ」が含まれ、「ユーザーまたはシェルスクリプトによって直接実行されることを意図していないオブジェクトファイル、ライブラリ、および内部バイナリが含まれる」と想定されています( ここを参照 )。
私のdebianサーバーの/ usr/libにあるソフトウェアの多くは、ライブラリや内部バイナリではなく、本格的なユーザー実行可能ソフトウェアです。
アプリケーションを/ optにインストールする予定です。しかし、私はこれが正しいかどうか、そして何よりもなぜかを本当に理解したいと思います。
よろしくお願いします。
エリック。
ファイルシステム階層標準を理解するための真の鍵は、それがネットワークファイルシステムを念頭に置いて設計されていることを知っていることです。
同じOS、リリース、アーキテクチャのすべてのマシンで、NFSを介して/ usrを共有してマウントできます。
/usrは、ネットワークスタックが初期化された後に(再)マウントされます。
/var <-- local, r/w optimized
/usr <-- can be mounted over network, possibly even read-only!
/opt <-- local, read mostly
/etc <-- local, read mostly
/srv <-- local, r/w optimized
/home <-- either/or
違いは、/usr
はインストールされたパッケージを保持することを目的としていることですシステムの一部として。 Debian/Ubuntuリポジトリ、PPAなどから入手したパッケージはここにあります。 /opt
は、バンドルされていないサードパーティディストリビューションのパッケージ配布プロセスを通じて配布されないアプリケーションを対象としています。
.debまたは.rpmパッケージを配布する場合は、最終的にソフトウェアが公式リポジトリに含まれるようにすることを目的として、/usr
にインストールする必要があります。それ以外の場合は、/opt
にインストールします。いずれの場合も、アプリケーションは任意の場所で実行できるようにコンパイルできる必要があります(たとえば、GNU autotools)を使用して)。
ライブラリは_<prefix>/lib
_に、バイナリは_<prefix>/bin
_に、ヘッダーファイルは_<prefix>/include
_に、manページは_prefix/[share/]man
_に、pkgconfigファイルは_<prefix>/lib/pkgconfig
_または_<prefix/share/pkgconfig
_、_<prefix>/share/aclocal
_のcmake.m4ファイル
次に、パッケージマネージャーにプレフィックスを決定させます。 rpm/debを自分で配布する場合は、プレフィックスとして_/usr
_が適しています。
_./configure --prefix=~/.local/
_それでも機能するはずなので、パスをハードコーディングしないでください。
一部のライブラリは、実行可能でライブラリとして使用できるようにする他のツールにラップされていますが、それでもライブラリであり、$ PATHにはないので、/ libに入れても問題ありません。
/ optの下にアプリをインストールしないことをお勧めします。理由1:一部のディストリビューションにはデフォルトで/ optがありません理由2:/ usr/libはライブラリの標準パスです{他のアプリケーションがライブラリを使用する必要がある場合は、ライブラリパスを/ etc/ldconfigに手動で追加する必要があります}/opt手動でインストールするスタンドアロンアプリがあり、それらがどこにあるかを知りたい場合に便利です
本格的な実行可能ファイルが/ usr/libの下にある理由の1つは、他のスクリプトから使用されているためである可能性があります。 {たとえば、bashスクリプトはAPIを直接使用できません。このため、一般的なトリックは、このapiの周りに「ラッパー」を作成し、スクリプトの引数としてパラメーターをプッシュすることです}
/ optにインストールしてください。
あまりにも多くのLinuxアプリケーションが、90年代にWindows開発者が作ったものと同じものを作っています。
C:\ windowsにインストールして、簡単に見つけやすく(そして少し速く)しましょう。その後、15年間のDLL地獄が訪れました。異なるソフトウェアパッケージには、同じライブラリの異なるバージョンが必要でした(Windowsではライブラリのバージョン管理がありませんでした)。
実際のシステムソフトウェアを作成しているのでない限り、それを/ optに入れて、誰が何をインストールしたかをより正確に追跡できるようにします。