ローカル実行可能ファイルはどこに配置する必要がありますか?


62

perforceバージョン管理クライアント(p4)の実行可能ファイルがあります。/opt/localルート権限がないため、配置できません。それを配置する必要がある標準の場所はあり$HOMEますか?

ファイルシステム階層には、ローカルの実行可能ファイル/バイナリを配置する必要があるという規則があり$HOME/binますか?

FHSのWikipedia記事で言及されているこのような規則は見つかりませんでした。

また、実際に規約がある場合、$HOME/binディレクトリへのパスまたはディレクトリの場所を明示的に含める必要binがありますか?

回答:


64

一般に、システム以外でインストールおよび管理されるバイナリを複数のユーザーがシステム全体でアクセスできるようにする必要がある場合、管理者はそれをに配置する必要があります/usr/local/bin。その下/usr/localには、ローカルでコンパイルおよびインストールされたソフトウェアパッケージに一般的に使用される完全な階層があります。

バイナリの唯一のユーザーである場合は、$HOME/bin自分でインストールでき、唯一のコンシューマーになるため、installingは適切な場所です。ソースからソフトウェアパッケージをコンパイルする場合、$HOMEディレクトリに部分的または完全なローカル階層を作成することも適切です。完全なローカル階層は次のようになります。

  • $HOME/bin ローカルバイナリ
  • $HOME/etc ローカルバイナリのホスト固有のシステム構成
  • $HOME/games ローカルゲームバイナリ
  • $HOME/include ローカルCヘッダーファイル
  • $HOME/lib ローカル図書館
  • $HOME/lib64 ローカル64ビットライブラリ
  • $HOME/man ローカルオンラインマニュアル
  • $HOME/sbin ローカルシステムバイナリ
  • $HOME/share ローカルのアーキテクチャに依存しない階層
  • $HOME/src ローカルソースコード

を実行する場合、インストールのデフォルトのプレフィックスとしてconfigure指定することにより、インストール用のローカル階層を定義する必要があります$HOME

./configure --prefix=$HOME

これで、make && make install実行されると、コンパイルされたバイナリ、パッケージ、マニュアルページ、およびライブラリが$HOMEローカル階層にインストールされます。$HOMEローカル階層を手動で作成していない場合make install、ソフトウェアパッケージに必要なディレクトリが作成されます。

にインストールし$HOME/binたら、に追加$HOME/binするか$PATH、絶対パスを使用してバイナリを呼び出すことができます$PATH。一部のディストリビューションはデフォルトで含ま$HOME/binれます$PATH。これをテストして、存在するかecho $PATHどうかを確認するか$HOME/bin、バイナリ$HOME/binを実行して実行しwhich binarynameます。で戻ってきた場合$HOME/bin/binaryname、デフォルトで$ PATHにあります。


5
$ HOMEがnoexecでマウントされたファイルシステム上にない限り。/ tmp /は通常、noexecでもマウントされます。
ewanm89

3
これは正しい、Filesystem Hierarchy Standard(FHS)の一部です。pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY
パトリック

29
の使用はお勧めしません$HOME。これにより、ホームディレクトリに、まったく興味のない多数のディレクトリが殺到します。誰が持っていたいmanlibものホームディレクトリになど、?私はむしろ下の階層を作成します$HOME/bin$HOME/local。これにより、ホームディレクトリに10個ではなく1個のサブディレクトリのみが追加されます。PATH簡単に含むように適合させることができる$HOME/bin/bin、または$HOME/local/bin
マルコ

18
1つのオプションは、たとえばXDG basedir spec(standards.freedesktop.org/basedir-spec/basedir-spec-latest.html)およびpython(python.org/dev/peps/pep-0370
janneb

4
@janneb 言及しているXDGベースディレクトリ仕様のみ$HOME/.local/share(バージョン0.7、2010年11月24日)。
ピョートルドブロゴスト

27

uther述べ/usr/local基本的に、の接頭辞として意図され、一方で、システム管理者によってインストールされたソフトウェア/usrのディストリビューションのパッケージからインストールしたソフトウェアを使用する必要があります。

この背後にある考え方は、(のような分散ソフトウェアとの衝突を避けるためにあるrpmdebパッケージ)と「ローカル」の接頭辞を介して管理者に完全な支配を与えます。

これは、管理者がdebianなどのディストリビューションを使用しながら、カスタムコンパイルされたソフトウェアをインストールできることを意味します。

FHSから

/または/ usrに配置されたソフトウェアは、システムのアップグレードによって上書きされる場合があります(ただし、このような状況では、ディストリビューションが/ etcのデータを上書きしないことをお勧めします)。このため、正当な理由がない限り、ローカルソフトウェアを/ usr / localの外部に配置しないでください。

ユーザー固有のソフトウェアをインストールする場合、書き込み許可があることを確認するため、プレフィックスとして使用すること推奨$HOMEます。個人的には、$HOME/.local(うまくいけば)整頓されたホームディレクトリが散らかるのを避けるため、よりエレガントなソリューションであると感じています!

$HOME/.local/shareは、freedesktop.org XDG Base Directory仕様で既に使用されているため、$HOME/.local/binに追加し、$PATHを作成する$HOME/.local/libなどの作業は、それほど必要ありません。

プレフィクスを隠しディレクトリにしたくない場合は、次のようにシンボリックリンクを簡単に作成することもできます。

ln -s .local ~/local

サイドノート

.config(not .local/etc)は、$XDG_CONFIG_HOMEユーザー固有の構成ファイルに使用されるデフォルト値であることに注意してください。また、残念ながら、ソフトウェアの大部分はXDGを無視し、好きな場所(通常はのルート$HOME)に構成ファイルを作成します。また$XDG_CONFIG_HOME、デフォルト$HOME/.configが必要な場合は設定を解除できることに注意してください。

奇妙なことに、ディストリビューションのデフォルト構成ファイル用に予約されたディレクトリがないため、ファイル/etcがディストリビューションによって提供されたか、システム管理者によって編集されたかを知る方法がありません。


1
私はの一切の言及を見つけることができません.localFHSに
ダニエルSerodio

@DanielSerodioこれは、XDGディレクトリ仕様であり、目立つようになった新しい標準です。unix.stackexchange.com/questions/316765/…およびsuperuser.com/questions/1170793/…を
ivan_pozdeev

/etc複数の管理者がいるサーバーを管理するとき、このサイドノートは本当に面倒です-confファイルのカスタム編集を追跡するのは非常に困難です。
naught101
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.