ソフトウェアが/ usr / libにインストールされるのはなぜですか?


11

私はもう何年もLinuxサーバーを使用していますが、Filesystem Hierarchy Standardで混乱し続けています。通常、私は混乱に耐えることができます。しかし、Linux用に独自のソフトウェアを開発している今、パッケージマネージャーによってインストールされる場所を理解する必要があります。

/ optが私のアプリケーションに最適な場所であると確信しました。しかし、私のDebianファイルシステムを調査した後、私はもうわかりません:多くのソフトウェアが実際に/ usr / libにインストールされています!いくつか例を挙げると、MySQL、MySQLWorkbench、Nautilus、Rythmbox ...

FHSによると、は/ usr / libの「プログラミングとパッケージのライブラリ」を含むようになっていると(「ユーザーやシェルスクリプトによって直接実行されることを意図していないオブジェクトファイル、ライブラリ、および内部のバイナリを含む」ここを参照してください)。

私のdebianサーバーの/ usr / libにあるソフトウェアの多くは、ライブラリや内部バイナリではなく、本格的なユーザー実行可能ソフトウェアです!

アプリケーションは/ optにインストールされる予定です。しかし、私は本当にこれが正しいかどうかよりも理解したいのです。

あなたの親切なアドバイスを事前に感謝します、

エリック。


2
MySQLWorkbenchが/ usr / libの下にライブラリのみをインストールすることを伝えることができることから、スポットチェック。/ usr / libに「本格的なユーザー実行可能ソフトウェア」があると思う理由は何ですか?
マークワーグナー

正しく覚えていれば、[アプリケーション]メニューにある実際のショートカットは、/ usr / libにあるバイナリを指しています。
エリックモランド

リストしたソフトウェアがインストールされている場所について混乱しているようです。MySQLおよびNautilusのファイルの場合のリストへのリンクを次に示します。FHSがそうすべきであるように、ファイルは/ etc、/ usr / bin、/ usr / libなどに分割されていることに注意してください。packages.debian.org/wheezy/i386/mysql-server-5.5/filelist packages.debian.org/wheezy/i386/nautilus/filelist
sciurus

回答:


6

Filesystem Heirarchy Standardを理解するための真の鍵は、ネットワークファイルシステムを念頭に置いて設計されていることを知ることです。

同じ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

ローカル/リモートおよびr-r / w規格へのリンクを提供していただけますか?
キャプテンキリン

これは、ネットワーク内のすべてのLinuxサーバーまたはワークステーションに対して1つの/ usr「リポジトリ」を使用できることを意味しますか?
エリックモランド

1
少し手間がかかりますが、はい、できます。高価なハードドライブが大規模なロールアウトの標準であったときに戻ってください。
ダンガースウェイト

@ eric-morand From FHS: "/ usrはファイルシステムの2番目の主要なセクションです。/usrは共有可能な読み取り専用データです。つまり、/ usrはさまざまなFHS準拠ホスト間で共有可能であり、書き込まないでください。 。ホスト固有の情報または時間とともに変化する情報は、別の場所に保存されます。」pathname.com/fhs/pub/fhs-2.3.html#THEUSRHIERARCHY
ダンガースウェイト

おっと。上記のコメントは@CaptainGiraffeのものでした
ダンガースウェイト

12

違いは、システムの一部として/usrインストールされたパッケージを保持することを意味します。Debian / Ubuntuリポジトリ、PPAなどから入手したパッケージは、ここにあります。while /optは、ディストリビューションのパッケージ配布プロセスを通じて配布されない、バンドルされていないサードパーティアプリケーションを対象としています。

.debまたは.rpmパッケージを配布し、最終的にソフトウェアを公式リポジトリに含めることを目指している場合は、にインストールする必要があり/usrます。それ以外の場合はにインストールし/optます。いずれの場合でも、アプリケーションは任意の場所で実行するようにコンパイルできる必要があります(たとえば、GNU autotoolsの助けを借りて)。


ありがとう。現時点では、公式リポジトリにアプリを含める予定はありません。
エリックモランド

では、/ usr / localはどうですか?またはそれは離散的です
アーロンコプリー

@AaronCopley /usr/localはこの質問の対象外でした。ただし、ローカル管理者がコンパイルしてインストールするサードパーティソフトウェアを対象としています。
マイケルハンプトン

それが私がそれが離散的とみなされるかどうか尋ねた理由です。
アーロンコプリー

2

ライブラリを<prefix>/lib、バイナリを<prefix>/bin、ヘッダーファイルを<prefix>/include、マニュアルページをprefix/[share/]man、pkgconfigファイルを、<prefix>/lib/pkgconfigまたは<prefix/share/pkgconfigcmake .m4ファイルをインストールします。<prefix>/share/aclocal

次に、パッケージマネージャーにプレフィックスを決定させます。RPMを自分で配布している場合/usrは、プレフィックスに適しています。

./configure --prefix=~/.local/ それでも動作するはずですので、どこにでもパスをハードコーディングしないでください!

一部のライブラリは他のツールにラップされて実行可能になり、ライブラリとして使用できるようになりますが、それらはまだライブラリであり、$ PATHにはないため、/ libに入れても問題ありません。


1

/ optの下にアプリをインストールしないことをお勧めします。理由1:一部のディストリビューションにはデフォルトで/ optがありません理由2:/ usr / libはライブラリの標準パスです{他のアプリケーションがライブラリを使用する必要がある場合は、ライブラリパスを手動で/ etc / ldconfigに追加する必要があります} / opt手動でインストールするスタンドアロンアプリがあり、それらの場所を知りたい場合に便利です。

本格的な実行可能ファイルが/ usr / libの下にある理由の1つは、他のスクリプトから使用されている可能性があります。{たとえば、bashスクリプトはAPIを直接使用できません。このため、一般的なトリックは、このAPIの「ラッパー」を構築し、スクリプトの引数としてパラメーターをプッシュすることです}


2
同意しません。/ optにインストールする場合、パッケージマネージャーはディレクトリを作成するため、問題はありません。また、/ usr / libにインストールされたバイナリは悪い考えです。
ウォルター

@Nikolaidis Fotisに感謝します。しかし、私の場合、私のアプリにはパブリックライブラリが含まれておらず、他のアプリケーションでは使用されません。
エリックモランド

0

/ optにインストールしてください。

あまりにも多くのLinuxアプリケーションが、90年代にWindows開発者が作ったものと同じメイクをしています。

C:\ windowsにインストールして、簡単で見つけやすいようにします(そして少し速くなります)。その後、異なるソフトウェアパッケージが同じライブラリの異なるバージョンを必要としたため、15年のDLL地獄が訪れました(Windowsではライブラリのバージョン管理がありませんでした)。

実際のシステムソフトウェアを作成しているのでない限り、/ optに入れて、誰が何をインストールしたかを追跡できるようにします。


4
これはWindowsではありません。動作するパッケージマネージャーがあり、これは実際にはそれほど問題ではありません。
マイケルハンプトン

すべてが同じツリーにあることを本当に心配している場合は、Nixパッケージマネージャーを確認してください。あなたが私に尋ねるなら、両方の世界のベスト。
TheSola10
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.