Linuxの/bin、/usr/bin、$HOME/binについて想う
この前Scalatraを使うためにConscriptというものをインストールしてて、こいつが~/binディレクトリを作っていて、あれ、そこなんやと思い調べてみた。
それぞれのbinディレクトリの役割と、あるコマンドをインストールする時に、/binか、/usr/binか、~/binがいいのかについて。
まずbinってなんや
まずbinってなんなんや。
binとは、Binary codeのことでようするに実行可能プログラム置き場ということ。バイナリということはコンパイル型の言語により作られたプログラムが置かれるのだろう。
そしてLinuxのディレクトリ構成については以下の記事がすごくよかった。ここで読めておいてよかったなと思った。
http://www.atmarkit.co.jp/ait/articles/0108/07/news002.html
/bin
まずは/binについて
/binには、FHSによって定められたシングルユーザを含めたどのユーザでも使えるコマンドだけが入る。FHSの定めたコマンドにも必須のもの(cat, lsとか)とOSごとに選択できるもの(tar, pingとか)があるらしい。
ここにその一覧がのってた。
http://www.pathname.com/fhs/2.2/fhs-3.4.html
また、
/binは、NFSを使ってネットワークで共有したり、ROMに収めたりすることを想定していますから、ここにユーザーが新たにコマンドをインストールするべきではありません。 http://www.atmarkit.co.jp/ait/articles/0108/07/news002_2.html
とのことで、よほどのことがない限りここにコマンドを追加する必要はなさそう。
ちなみに自分のMacでは、
$ ls /bin date expr ln pwd stty zsh bash dd hostname ls rcp sync cat df kill mkdir rm tcsh chmod domainname ksh mv rmdir test cp echo launchctl pax sh unlink csh ed link ps sleep wait4path
といった感じだった。zshとかは自分で追加したとして、sleepやwait4pathはもともとOS Xの/binに追加されてるみたい。
wait4pathコマンドについは以下。公式のドキュメントがあった。
個人的にはFHSの/binの定義に超重要なcdコマンドがないのが面白いなと思った。それだけ/binはツリーの根の部分で作業するために最低限にあるコマンドなのかなと思った。
/usr/bin
続いて/usr/binについて。
ユーザーが一般的に使用するコマンドで、 緊急時のシステム保守に必須ではないコマンドが配置されます。 http://www.linuxmaster.jp/linux_skill/2010/02/06linux.html
また、/usr/sbinについては、
システム管理コマンドで、緊急時のシステム保守に必須ではないコマンドが配置されます。 http://www.linuxmaster.jp/linux_skill/2010/02/06linux.html
とある。
なるほど、/binがOSの働きの根幹に関わるような役割をもつコマンドがはいっているのにたいして、/usr/binにはそれよりももっと一般的に使われるようなコマンドが主に入っているみたいだ。
自分のPCだと、gitやviがここに入っていた。
~/bin
そして~/binについて。
これまで二つのbinディレクトリの役割からも分かるように、これはログインしているユーザに依存したコマンドを格納することになる。
自分でプログラムをインストールしたりするときは基本的に~/bin以下にインストールするのが良い気がする。例えばサーバー用のOSで他のユーザと共有となってしまう形で、コマンドを叩けるプログラムをぼんぼんインストールすべきでないと思うし。
以下の方がおっしゃっていることがその通りだなと感じた。
http://tyru.hatenablog.com/entry/20090510/1241935374
そしてこの方のスクリプトとかすごく参考になる。
http://tyru.hatenablog.com/entry/20090510/1241935374
自分で何かツールとかを作った時には、~/binにインストールする設定で書くようにしようと思った。
(Conscript、いけてるやん。。。)
おわり
ということでbinについて気になったので調べてみたら、思いのほかすごくおもしろかった。
逆に今まで何故疑問をいだいてググらなかったのだろうと後悔してるけど、当たり前になってしまったこともこれからは積極的にググって理解するようにしたいと思った。
最後まで読んでいただいてありがとうございました。何か間違ったところなどあればご指摘いただけるととてもうれしいです。