慣用的なUnixプログラムは、インストールされたプレフィックスが何であるかをどのように検出しますか?

慣用的なUnixプログラムは、インストールされたプレフィックスが何であるかをどのように検出しますか?

たとえば、非標準のプレフィックスを含むバイナリをインストールしたが、いくつかの/opt/bin/foo静的ファイルが必要な場合は、/opt/share/fooそのファイルをどのように見つけますか?実行可能ファイル()に基づいて../share/foo逆参照を使用しますか?コンパイル時にハードコードされていますか?

何ですかアプリケーションは変数のインストールプレフィックスをどのように処理しますか?すべてのディレクトリにプレフィックスを付ける必要がありますか? (何について/var?)

ベストアンサー1

コンパイル時にこれらの参照をハードコーディングするのが一般的であり、コンパイル時のデフォルト値をオーバーライドするためにコマンドラインオプションまたは環境変数を指定できます。通常、プログラムは/etcコンパイル時のデフォルト値を上書きできる設定ファイル(通常は下)の場所のみを記憶します。このアプローチは、オペレーティングシステムを作成したのと同じ人がLinuxディストリビューションまたはBSDポートの一部としてコンパイルしたオープンソースソフトウェアに最適です。

バイナリ形式でデプロイされたアプリケーションの一般的なアプローチは、0番目の引数から始めてアプリケーションバイナリを見つけることです。通常、0番目のパラメータはexecve(つまりargv[0])は、バイナリ(呼び出し元(通常シェル)が準拠するルール)へのパスです。argv[0]含まれていない場合、/アプリケーションは$PATHそれに対して照会を実行する必要があります。

おすすめ記事