Linuxにバイナリを配置する場所がそれほど多くあるのはなぜですか?少なくとも次の5つがあります。
/bin/
/sbin/
/usr/bin/
/usr/local/bin/
/usr/local/sbin/
私のオフィスボックスでは、これらの一部に対する書き込み権限がありません。
これらのbin
sには、どのタイプのバイナリが入りますか?
/bin
(および/sbin
)は、大きな/
などのパーティションをマウントする前に、小さな/usr
パーティションに置く必要があるプログラムを対象としています。最近では、主に/bin/sh
などの主要なプログラムの標準の場所として機能していますが、元の意図はまだ関連している可能性があります。小さな組み込みデバイスへのインストール。
/sbin
は、/bin
とは異なり、/usr
がマウントされる前に必要なシステム管理プログラム(通常は使用されません)向けです。
/usr/bin
は、ディストリビューション管理の通常のユーザープログラム用です。
/usr/sbin
は、/usr/bin
が/sbin
と同じように/bin
と同じ関係にあります。
/usr/local/bin
は通常のユーザープログラム用ですnot配布パッケージマネージャーによって管理されます。ローカルでコンパイルされたパッケージ。これらを/usr/bin
にインストールしないでください。将来のディストリビューションアップグレードにより、警告なしに変更または削除される可能性があります。
この時点でおそらく推測できるように、/usr/local/sbin
は/usr/local/bin
を/usr/sbin
から/usr/bin
に変換したものです。
さらに、モノリシックな非配布パッケージ用の/opt
もありますが、適切に統合される前に、さまざまな配布がGnomeとKDEを配置しました。一般的には、Oracleなどの動作が不十分なサードパーティのパッケージ用に予約する必要があります。
ファイルシステム階層のマニュアルページを確認することをお勧めします。
man hier
これはオンラインでも利用できます。例: http://linux.die.net/man/7/hier 。関連する部分を以下にコピーしました。システムによっては、別のことを言うかもしれません。
名前
hier-ファイルシステム階層の説明
説明
典型的なLinuxシステムには、特に次のディレクトリがあります。
/bin
このディレクトリには、シングルユーザーモードでシステムを起動または修復するために必要な実行可能プログラムが含まれています。
/sbin
/bin
と同様に、このディレクトリにはシステムを起動するために必要なコマンドが含まれていますが、通常は通常のユーザーによって実行されません。/usr/bin
これは、実行可能プログラムのプライマリディレクトリです。ブートやシステムの修復に必要のない、ローカルにインストールされていない通常のユーザーが実行するほとんどのプログラムは、このディレクトリに配置する必要があります。
/usr/local/bin
サイトにローカルなプログラムのバイナリ。
/usr/local/sbin
システム管理用にローカルにインストールされたプログラム。
/usr/sbin
このディレクトリには、ブートプロセス、
/usr
のマウント、またはシステムの修復に必須ではないシステム管理用のプログラムバイナリが含まれています。
Wikipediaの Filesystem Hierarchy Standard エントリは、私が持っていたときと同じ質問に答えるのに役立ち、それに非常に説明的な表があります。
そのページからの抜粋1:
/bin Essential command binaries that need to be available in single user mode; for all users, e.g., cat, ls, cp. /usr/bin Non-essential command binaries (not needed in single user mode); for all users. /usr/local Tertiary hierarchy for local data, specific to this Host. Typically has further subdirectories, e.g., bin, lib, share /usr/sbin Non-essential system binaries, e.g., daemons for various network-services. /sbin Essential system binaries, e.g., fsck, init, route.
12019年6月19日に取得。 パーマリンク 。
sbin
ディレクトリには、通常システム管理のみを行うプログラムが含まれています。一般ユーザー向けのプログラムは絶対に使用しないでください。
起動時にいくつかのプログラムが必要で、最終的には/bin/
または/sbin/
になります。これらは、ファイルシステムがマウントされる前に使用可能でなければなりません。ファイルシステムのチェックとマウントに必要なmount
やfsck
のようなものが存在する必要があります。
ほとんどのパッケージプログラムは、最終的に/usr/bin/
および/usr/sbin/
になります。これらは、ルートファイルシステム以外のファイルシステムにある場合があります。場合によっては、ネットワークにマウントされたドライブ上にある可能性があります。
ローカルプログラムとスクリプトは/usr/local/bin/
と/usr/local/sbin/
に属しています。これにより、それらは明らかに非標準であり、おそらくサイトでのみ入手可能であることがわかります。
詳細については、コマンドman hier
を実行してみてください。これにより、ディストリビューションに推奨されるファイルシステム階層の説明が提供されます。また、Wikipediaで File System Hierarchy について読むこともできます。
1970年代、UNIX
は/bin
にすべての公式の実行可能ファイルがあり、/usr/bin
はユーザーのホームディレクトリ(例:/usr/dmr
)の下の場所で、どのユーザーも保存できました。他の人にとっても興味があったかもしれない独自のバイナリ。
このオープン/usr/bin
の結果は、文書化されていないソフトウェアのジャンクヤードでした。そのため、Stephen Bourne
は、毎晩新しいバイナリをチェックし、ドキュメントがないか、またはそのバイナリを削除するcron script
を作成しました。ドキュメントも更新せずに更新されました。
1970年代後半、/usr/bin
がOSベースのディストリビューションに統合され、以前のオープン/usr/local/bin
の目的で/usr/bin
を使用するようになりました。
しばらくして、システム管理者は/usr/local/bin
を使用して、ネットワーク(USENETなど)からインポートされたnon-local
ソフトウェアを格納しました。また、UNIX企業は、/usr/bin
と同じ間違いを繰り返すのを嫌がっていました。 、1987年頃にファイルシステム階層会議があり、すべてのUNIX企業が/usr/local/bin
をあきらめ、代わりに/opt/<vendor>/bin
を使用することに同意しました。
残念ながら、Linuxディストリビューションはこの決定に従わなかった...