拾い物のコンパス

まともに書いたメモ

いつの間にかLinuxの/bin関係が/usrへのシンボリックリンクへ変わっていた話

タイトルの通り.気になったから調べた.
調査結果を書き残すが,誰にとって役に立つのかはわからない.

何が起こった

普段はArch Linuxを使っている.
何気なくls / をすると,いつの間にか/bin/usr/binへのシンボリックリンクになっていた.
な・・・ なにを言っているのかわからねーと思うが,おれも何でこうなっているのかわからなかった・・・.
複数のディレクトリがシンボリックリンクになっていて,変わっていたのは以下の通り.

/bin       -> /usr/bin/
/sbin      -> /usr/bin/
/usr/sbin  -> /usr/bin/
/lib       -> /usr/lib/
/lib64     -> /usr/lib/
/usr/lib64 -> /usr/lib/

新手のマルウェアに感染したのかとも思ったが,それにしてはどうにも様子がおかしい.
調べたら,割りと普通のことみたいだった.

調査結果

概要

答えはここにあった.
昔は/usrなどを分けることに意味があったが,最近のLinuxのファイル構造的に必要がなくなってきたらしい.
統合してしまえば,スクリプトに書くパスやらが簡略化されて利点が多いから,統合していこうぜ,ということらしい.

もうちょい詳細

英語の解釈が怪しいから,間違っていたら指摘お願いします.
通常,/bin/sbinディレクトリには,single user mode用のユーティリティが入るようにFilesystem Hierarchy Standardで定義されている.
昔は/usrは必要に応じて後からマウントするやつだから,ディレクトリを分けていた.
しかし,今では起動時にマウントされるディレクトリに含まれている上に,最近の/bin & /sbinのツールの多くは/usrを予めマウントしないと使えないやつが多くなったから,不可分になってしまっているらしい(未確認,本当か?).
だから,現行のOSでは,/bin/usr/binを分けることなく,/にある全てのディレクトリは対応する/usrディレクトリとマージすることにしたらしい.
というわけで,/bin/usr/bin/lib/usr/lib/sbin/usr/binへと言うように統合された.
/sbin/binを統合しちゃったことに対しては,良いのか?,という気はする.1つにするに越したことはないが.

利点

大きな利点は,システムの複雑さを軽減できること.
例えば,ネットワーク共有の観点から言えば,今までは共有時に/usr以下にあるコアコンポーネントを共有できず,マウントする側で用意する必要があった.これがなくなる.
更に,開発時にパスの違いからツール場所をハードコーディングしていたやつを1つにできる.
他には,/usrを複数のゲストOSで読み取り専用で共有できるようになり,ゲストのファイルシステムが数MBまで縮小できる.
以上のような利点があるらしい.

トリビア

初めて今回のマージをしたのは,15年前のOracle Solarisからで,完了したのはSolaris 11らしい.
思ったより歴史が古い.

さいごに

まだArch Linuxでしか確認していないが,Ubuntu 17.10とかでも同じことになっているのだろうか.
気が向いたら確認して見る予定.

参考URL

同じことを考えた人がいたようだ: linux - Why is /bin a symbolic link to /usr/bin? - Unix & Linux Stack Exchange

詳細: TheCaseForTheUsrMerge