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
について気になったので調べてみたら、思いのほかすごくおもしろかった。
逆に今まで何故疑問をいだいてググらなかったのだろうと後悔してるけど、当たり前になってしまったこともこれからは積極的にググって理解するようにしたいと思った。
最後まで読んでいただいてありがとうございました。何か間違ったところなどあればご指摘いただけるととてもうれしいです。