いつの間にか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