/bin
読み:ビン
外語:/bin: binaries

 UNIXPOSIX準拠OS(Linux等)で、コンピューター利用者全員で用いる、基本的なバイナリファイル(実行ファイルなど)を格納するディレクトリ
目次

概要
 /binは、起動時にまずルートディレクトリ(/)としてマウントされるrootfsに作られたディレクトリである。従って、正常に稼働しているシステムなら起動直後から必ず存在し、アクセスすることが出来るディレクトリとなる。
 /binがあるOSでは、chmodcppwdlsmvシェルなど、無ければ困る基本コマンドがここに入る。
 少なくともここにはパスを通しておかないと、著しく不便な思いをする(ある意味実用にならない)ことになる。

特徴

二種類
 古いUNIXでは/binのほかに/usr/binが別にあった。
 やがて、起動時に必要なファイル(rootfsにないと困るファイル)は/sbinに集約されたため/binの必要性は減り、後に/usr/binに統合され、/binは単なる/usr/binへのシンボリックリンクで済むようになった。
 但し、PC UNIXの代表であるBSDLinuxでは、主要なものを/binに、その他ユーザーランド関係を/usr/binに置くというポリシーが守られているようで、今でも分離している。しかし、その使い分けは曖昧である。

miniroot
 そもそもなぜ、/binと/usr/binで分けるようになったのか。
 それは、インストールやシステム修復時に使うminirootのようなシングルユーザーモードで必要なものをルートパーティションに置いたためで、このルートパーティションの容量は必要最小限(古くはフロッピーディスクの容量)で済むように工夫されてきた。
 そこで、必須のものを/bin、それ以外を/usr/binに置くようになった。
 もちろんルートパーティションと/usrパーティションを同一にすることも可能だが、現実には、そのような運用はあまりされていない。

動向

Fedora
 Linux界隈でも、ディストリビューションによっては、異なる構成にするものがある。
 Fedoraの場合、/binなどを廃止して/usr以下に統合し、/usrをrootfsに置くようにしたらしい(未確認)。/binはおそらく/usr/binへのシンボリックリンクとなったのだろう(未確認)。
 Linuxの場合、シングルユーザーモード用バイナリに相当するのはinitrdに存在し、/bootパーティションに存在するため、/usrをrootfsに取り込むという考え方もできたらしい。initrdを使わない環境を作りたい場合は不便になるが、Fedoraならinitrd必須でも特に困らないのかもしれない。

GNU Hurd
 ルートパーティションと/usrパーティションの区別を無くすという考え方は決して新しいものではなく、GNU Hurdも以前から実施していた。
 但しGNU Hurdの場合、/usr/bin、/usr/sbin、/usr/libを廃止して、各々、/bin、/sbin、/libに統一していた。
 /usrをルートパーティションに置くという方針と結果はFedoraと同じだが、統合する場所が違うのが、恐らく思想の違いなのだろう。
 単なる利用者の視点からすると、統合するなら、GNU Hurdの方式の方が素直に見えるが、Fedoraはなぜ逆にしたのか、定かではない。

/bin/sh
 /bin/sh は、シェルである。
 元々は元祖シェル(Bourne Shell)であったが、現在は使用中のシェルへのシンボリックリンクであることが多い。
 多くのLinuxディストリビューションでは、/bin/sh はbash(/bin/bash)へのシンボリックリンクである。一方でUbuntuの場合、/bin/shがシンボリックリンクなのは他のLinuxディストリビューションと同じだが、そのリンク先はLinuxで人気のbashではなく、dash(/bin/dash)となっている。dashはashの派生であり、元祖シェルに近い機能を持つ。
 世の中には、bashの機能を用いていながら、シェルスクリプトの先頭に #!/bin/sh などと書いて済ませる不届き者が多くいる。/bin/sh のリンク先がbashであるなら正常動作するが、さもなくば正常に動作しない。このためdashを使うUbuntuではシェルスクリプトが正常動作しないという「問題」が発生した。

実装

主要なファイル
 OSにより異なる可能性があるが、このディレクトリに良く置かれているファイルは次の通りである。

差異など
 最近のLinuxや、FreeBSD 6.1ではtcshが採用されており、/bin/tcshにある。
 同じBSDでも、NetBSD 4.0は標準がcshである。NetBSDの場合、packageを使ってインストールするのが一般的なので、この場合、本体は/usr/pkg/bin/tcshとなり、/bin/tcshはこの本体へのシンボリックリンクとなる。

再検索