/bin
読み:ビン
外語:/bin: binaries
UNIX
や
POSIX
準拠OS(
Linux
等)で、コンピューター利用者全員で用いる、基本的なバイナリファイル(実行ファイルなど)を格納する
ディレクトリ
。
目次
概要
特徴
二種類
miniroot
動向
Fedora
GNU Hurd
/bin/sh
実装
主要なファイル
差異など
概要
/binは、起動時にまず
ルートディレクトリ
(/)としてマウントされるrootfsに作られたディレクトリである。従って、正常に稼働しているシステムなら起動直後から必ず存在し、アクセスすることが出来るディレクトリとなる。
/binがあるOSでは、
chmod
、
cp
、
pwd
、
ls
、
mv
や
シェル
など、無ければ困る基本コマンドがここに入る。
少なくともここにはパスを通しておかないと、著しく不便な思いをする(ある意味実用にならない)ことになる。
特徴
二種類
古いUNIXでは/binのほかに
/usr/bin
が別にあった。
やがて、起動時に必要なファイル(rootfsにないと困るファイル)は
/sbin
に集約されたため/binの必要性は減り、後に/usr/binに統合され、/binは単なる/usr/binへの
シンボリックリンク
で済むようになった。
但し、
PC UNIX
の代表である
BSD
や
Linux
では、主要なものを/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により異なる可能性があるが、このディレクトリに良く置かれているファイルは次の通りである。
[
cat
chio
chmod
cp
csh
date
dd
df
domainname
echo
ed
expr
hostname
kill
link
ln
ls
mkdir
mv
pax
ps
pwd
rcp
rm
rmdir
sh
sleep
stty
sync
tcsh
test
unlink
差異など
最近のLinuxや、FreeBSD 6.1ではtcshが採用されており、/bin/tcshにある。
同じBSDでも、NetBSD 4.0は標準がcshである。NetBSDの場合、packageを使ってインストールするのが一般的なので、この場合、本体は/usr/pkg/bin/tcshとなり、/bin/tcshはこの本体へのシンボリックリンクとなる。
再検索