/ optと/ usr / localの違いは何ですか?


404

よるとはFilesystem Hierarchy Standard/opt「アドオンアプリケーションソフトウェアパッケージのインストール」のためです。 /usr/local「ソフトウェアをローカルにインストールするときにシステム管理者が使用するため」です。これらのユースケースは非常によく似ています。通常、ディストリビューションに含まれていないソフトウェアは、デフォルトで、選択した特定の韻や理由のいずれ/usr/local/optでインストールされるように構成されています。

私が欠落しているいくつかの違いがありますか、または両方が同じことをしますが、歴史的な理由で存在しますか?


3
私の理解では、これはファイルシステムの/usr/localローカルバージョンであり、その他のもののプレースホルダーです。/usr/opt
-yasouser


歴史的な理由に関するトピック外:bin、sbin、usr / bin、usr / sbin splitの理解
アレクセイ

回答:


357

両方のオペレーティングシステムに属していないファイルを含むように設計されており、一方で/opt/usr/local同じファイルのセットを含むように意図されていません。

/usr/local通常はmakeコマンド(例:)を使用して、管理者が作成したファイルをインストールする場所./configure; make; make installです。これは、オペレーティングシステムの一部であるファイルとの衝突を回避することです。これらのファイルは、ローカルのファイルを上書きまたは上書きします(たとえば、/usr/bin/fooOSの一部で/usr/local/bin/fooあり、ローカルの代替です)。

以下のすべてのファイル/usrはOSインスタンス間で共有可能ですが、これはLinuxではめったに行われません。これは、/usr読み取り専用であると定義されているように、FHSがわずかに矛盾する部分ですが、/usr/local/binソフトウェアのローカルインストールを成功させるには読み取り/書き込みが必要です。FHSの主なインスピレーションの源であったSVR4ファイルシステム標準は、この問題を回避するために/usr/local/opt/local代わりに回避して使用することを推奨しています。

/usr/local元のBSDからの遺産です。当時、/usr/binOSコマンドのソースコードはとに/usr/src/binあり/usr/src/usr.bin、ローカルで開発されたコマンドのソースはに/usr/local/srcあり、そのバイナリはにありました/usr/local/bin。パッケージ化の概念はありませんでした(tarball以外)。

一方、/optバンドルされていないパッケージ(つまり、オペレーティングシステムの配布の一部ではないが、独立したソースによって提供されるパッケージ)をインストールするためのディレクトリであり、それぞれが独自のサブディレクトリにあります。これらは、独立したサードパーティのソフトウェアディストリビュータによって提供されるパッケージ全体が既に構築されています。/usr/localものとは異なり、これらのパッケージはディレクトリ規則に従います(または、少なくともそうすべきです)。たとえば、someappにインストールされ/opt/someapp、そのコマンドの1つが/opt/someapp/bin/foo、その構成ファイルがに、/etc/opt/someapp/foo.confログファイルがになり/var/opt/someapp/logs/foo.accessます。


53
/ usr / local、自己、社内、コンパイルおよび保守されたソフトウェア用。/ optは、自己以外の、外部の、事前にパッケージ化されたバイナリ/アプリケーションバンドルのインストール領域です。うーん...すべてのためのC:\ programファイルがありません;
ニキル・マレー

2
「一方、/ optは、バンドルされていないパッケージをインストールするディレクトリです」「バンドルされていない」パッケージとはどういう意味ですか?
ケビンウィーラー

1
@KevinWheelerそれは次の文で説明されています。バンドルされていないとは、パッケージがオペレーティングシステムのディストリビューションの一部ではなく、独立したソースから提供されることを意味します。
jlliagre

2
@jlliagre the centos docs * state「たとえば、/ usr /ディレクトリがリモートホストから読み取り専用NFS共有としてマウントされている場合、/ usr / local /ディレクトリの下にパッケージまたはプログラムをインストールすることはまだ可能です」誰が正しいのか分かりませんが、これはFHSが弱い地域についてのあなたの主張と矛盾しているようです。(*ソースcentos.org/docs/5/html/5.1/Deployment_Guide/...
ケビン・ウィーラー

1
@KevinWheelerそれはまさに私が言及している弱点です。リモートの読み取り専用ディレクトリにパッケージまたはプログラムをインストールすることは不可能です。回避策は、ローカルファイルシステムを/ usr / localにマウントすることですが、これは適切に設計されたものというよりは、間に合わせのジョブのように見えます。
jlliagre

84

基本的な違いは、/usr/localソフトウェアがシステムパッケージャーによって管理されていないが、標準のUNIX展開規則に従っていることです。

あなたが持っている理由です/usr/local/bin/usr/local/sbin /usr/local/includeなど...

/opt一方、これに従わず、モノリシックに展開されるソフトウェア向けです。これには通常、「Windows」スタイルでパッケージ化された商用および/またはクロスプラットフォームソフトウェアが含まれます。


12
私はあなたのモノリシックな点に同意しません。FHS標準では、/ optサブディレクトリにインストールするパッケージは、ホスト固有のファイルを/ optの外側に、それぞれ設定ファイルの場合は/ etc / opt / packageに、ログ、スプールなどの場合は/ var / opt / packageの下にインストールする必要があるとされています。/ optは実際には/ usr / localよりもunixの展開ルールに近いため、すべてを読み取り専用にする必要があるディレクトリの下に配置しますが、明白な理由のためにすることはできません。
jlliagre

5
もちろん、optパッケージを作成していて、FHS準拠を主張したい場合は。それ以外の場合、標準は「ガイドライン」と呼ばれるものよりも多くなります。NetBeansが/ etc / opt / netbeansを使用しないという理由だけで、システム全体の場合は/ optに、シングルユーザーの場合は$ HOME / .local / optに入れられません。
-jla

1
@jlaあなたの最後のコメントが私に向けられたと思いますので、OPまたは返信の著者である他の誰かに返信するときは@ xxxを使用してください。/ etc / optについて、FHSは(ガイドラインとして)推奨される場所ではなく、必須の場所であると言っています。あなたまたはNetbeans開発者は、それを実施する権限がないため、その標準に違反することはできますが、それを間違えると言うことはしないでください。それは不幸な誤解または故意の違反です。
jlliagre

8
@jlliagre私のシステムの管理者として、FHSは一連のガイドラインです。/ optディレクトリは、モノリシック/ opt / <package>または/ opt / <provider>ソフトウェアを配置するための常識の確立された場所です。<package | provider> / all / data / required / to / supportを使用したいパッケージをインストールすると、プロバイダーが最新のFHSのすべての詳細に従うことができない場合でも、opt /になります。電子メールを送信したり、バグを報告したりするかもしれませんが、私のモノリシックパッケージを他のどこかに置いて、システムのFHSについて気分を良くするつもりはありません。
-jla

1
@jlliagre多くのものを/ optにインストールしましたが、/ etc / optにファイルは作成されません。すべき?
erm3nda

18

実際、それらは非常に似ており、どちらを使用するかは意見の問題です。Linuxジャーナルには、この正確なトピックに関するこのポイント/カウンターポイントディスカッションがありました


9
まあ。私は自分自身を「聖戦」に引きずり込むつもりはありませんでした。
パッチ

13

私にとって、個人的には、@ philfrのリンクでビルが言ったことです。

開発システムまたはサンドボックスでは、/ optディレクトリを使用して、物を投げて、それらが機能するかどうかを確認することができます。試してみるために自分で物事をパッケージ化する努力をするつもりはないことを知っています。アプリが動作しない場合は、単に/ opt / mytestappディレクトリをrmすると、そのアプリケーションが履歴になります。大規模な展開を実行している場合(アプリをパッケージ化する場合もあります)、パッケージングは​​理にかなっている場合がありますが、多くの場合、/ optでトスするのは良いことです。

残念ながら、ほとんどのmake installスクリプト/usr/localは単にそこにシンボリックリンクを作成する代わりにファイルをプッシュします:-/


2
ポイントは何でしょうか?とにかくシンボリックリンクを作成する場合、最初の場所に元のファイルを置くだけではどうですか?
Let_Me_Be

8
make installファイルをプッシュするターゲットについてコメントするだけ/usr/localです。この機能は、--prefix=コマンドラインパラメーターを./configureスクリプトに渡すことで簡単に変更./configureできます。スクリプトがない場合は、次のmakeようにターゲットにパラメーターを渡すことができますmake --prefix=/usr install
ショーンC.

3
/ optは$ PATHに含まれる標準ディレクトリですか?/ usr / localが知っています。
ローレンス

5
@Let_Me_Beの利点は、古いバージョンを非常に簡単に保持できることです。とにある 'foo'の2つのバージョンがある/opt/foo-1.1とし/opt/foo-1.2ます。アップグレードすると、foo-1.2へのfooシンボリックリンクが/usr/local/binポイントされます。何らかの理由でロールバックする必要がある場合、シンボリックリンクをfoo-1.1を指すシンボリックリンクに置き換えるだけです。数週間後に1.2で問題ない場合rm -rf /opt/foo-1.1は、古いバージョンをすばやく簡単に削除できます。
ペポルアン

7
@ultrasawbladeいいえ、そうではありません。あるべきではありません。結局、FHSによれば、/ optはパッケージの名前を含むサブディレクトリに再分割する必要があります。すべてをPATHに詰め込むことは、災害への確実な方法です。むしろ、アプリは/ optの下に自分自身をインストールし、ユーザーが呼び出したプログラムを/ usr / local / bin(またはsbin)にシンボリックリンクする必要があります。
ペポルアン

11

まず、厳密な答えがあるとは思わない。背景に応じて、管理者が異なれば意見も異なります。歴史的に、/usr/local最初に来ました。これは、IIRCのバークレーでのコンベンションでした。System Vの開発中のある時点で、私が間違えなかった場合(これはずっと前であり、メモを取っていませんでした)、/usr読み取り専用にマウントできるようにするという決定または要望がありました。つまり、新しいソフトウェアを追加できませんでした。それ/opt が発明された理由かもしれません。偶然にも/usr、そのアイデアを書き出した既存のソフトウェアが非常に多く存在していたため、そのアイデアは決して現実のものにはなりませんでした。

私の個人的な好みはで/opt、製品ごとに個別のサブディレクトリがあります。これにより、製品の削除が単純なケースになり rm -frます。ただし、すべてのソフトウェアが適切なパッケージマネージャーを介してインストールされている場合は重要ではなく、インストールするソフトウェアがこれらの規則に厳密に従わず、構成などをどこかに書き込む/usr場合でも、どちらでも構いませんが、反対の理由で。


1
「」「すべてのソフトウェアは、適切なパッケージマネージャーを介してインストールされます」
パセリエ

1
@Pacerierは可能です。使用しているディストリビューションによって異なります。ソフトウェアが何であれ、おそらくArch User Repositoryにあります。そうでない場合、PKGBUILDは比較的簡単に記述できます。
-StarlitGhost

9

私はこの問題について少し異なる見解を持っています。jlliagre答え
すべて正しいですが、私にとって実用的なアプリケーションは、クラスターにソフトウェアをデプロイするとき、デフォルトの環境変数とデフォルトのライブラリの再利用になります。

単純に- /usr/localとそのすべての子ディレクトリは、などの適切なenv変数にPATHありMANPATH/usr/local/lib{,64}ldconfigにあります(/etc/ld.so.conf.d/)。

/opt/OTOHはそうではありません。これは、システムに共存するために複数のバージョンまたは競合するパッケージを必要とする場合に有利ですが、何らかの環境管理(たとえば、環境モジュールまたはソフトウェアコレクション)を必要とし、潜在的に「無駄になる」という欠点がありますの各インストールは/opt完全に自己完結型であるため、共有ライブラリを複製することでストレージスペースを確保できます。

共有するという性質の/usr/localために、例えばバイナリは等ではなく直接インストールされます/usr/local/bin(そしてmanページは適切になります/usr/local/share/man/.../usr/local/app/{bin,share/man,...}

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