![類似のプログラムを単一のパス ディレクトリにグループ化することには、何か利点がありますか?](https://rvso.com/image/192220/%E9%A1%9E%E4%BC%BC%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E5%8D%98%E4%B8%80%E3%81%AE%E3%83%91%E3%82%B9%20%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E5%8C%96%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AB%E3%81%AF%E3%80%81%E4%BD%95%E3%81%8B%E5%88%A9%E7%82%B9%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
Web サーバーで Prometheus を設定しているのですが、各エクスポーターは独自のプログラムであり、$PATH のディレクトリに追加する必要があることに気付きました。
私の質問は、これら専用のディレクトリ (たとえば、"/usr/exporters/bin" など) を作成し、そこにすべてのエクスポーター プログラムを配置し、そのファイルを $PATH に追加することに利点があるかどうかです。それとも、バイナリを格納するための既定のディレクトリにプログラムをプッシュするのが最善でしょうか。
答え1
唯一の利点は$PATH
、 内のディレクトリが少なくなるため、実行可能ファイルを探すときに検索するディレクトリが少なくなることですが、次の点が挙げられます。
このイベント ( 内のすべてのディレクトリの検索
$PATH
) はまれです。$PATH
エントリ (実行可能ファイル) は 内のハッシュ テーブルに保存されbash
、起動時または を介して更新されます。毎回rehash
検索する必要はありません。$PATH
このイベントはコストがかかりません。必要なすべての情報 (ファイルが存在し、権限によって実行が許可されている) は、ファイルのディレクトリ エントリから収集できます。各ファイルにアクセスする必要はありません。ディレクトリを読み取るだけです。
実行ファイルを共通の他のディレクトリに移動しない理由は次のとおりです。
非標準の環境になります。サポートを依頼する場合、これを説明するには余分な労力が必要になります。非標準の環境によって特に発生する問題を解決するのは非常に困難です。
非標準の環境になります。更新バージョンがリリースされると、環境は更新で期待されるものと一致しなくなります。
非標準の環境になります。今週、来週、その次の週、… ずっと、非標準の環境の更新を覚えておいて実行する必要があります。
それは何の利益もないモンキーモーションです。
答え2
バイナリを、対応するライブラリと同じディレクトリに保存するのは、非常に一般的です。使用例はバージョン管理です。たとえば、Python の複数のバージョン (2.7、2.7、3...) がインストールされていて、それらすべてが必要で、標準を定義したい場合などです。
通常、これはスイートを使用し、たとえば( の定義を含む)alternatives
からのバイナリへのソフトリンクを使用します。/usr/bin
/etc/alternatives
大きな利点の 1 つは、 で左から右への順序を使用することです$PATH
。たとえば、標準コマンドをローカル バージョンまたは事前チェックを実行するスクリプト ( shred
ding ファイルの前に警告を出すスクリプトなど) でオーバーライドする場合、それらを の先頭にリストされているディレクトリに配置する$PATH
と、ローカル (ユーザー) バージョンが実行され、標準バージョンはフル パス経由でのみ実行されます。
質問についてもう少し詳しく言うと、バイナリを移動するのは良い考えではありません。バイナリはディレクトリ内の他のファイルに依存している可能性があります。せいぜいソフトリンクにしてください。または、alternatives
ツールセットを使用するだけです。これにより、より詳細な概要を把握するのにも役立ちます。
答え3
場合によります...
こうしたプログラムが何百もあるなら、そうかもしれません。
それ以外の場合は、/usr/local/bin/
が $PATH 内にあるため、プログラムを適切な場所のユーザー ディレクトリに配置し、 内の各プログラムに対応するソフト リンクを配置します/usr/local/bin/
。これは完璧ではありませんが、PATH のマングリングを回避します。