HomebrewのCellarから/usr/localについてとか

Macユーザーならおなじみ, パッケージ管理ツールの Homebrew .

ぼくも大変お世話になっているわけですが, たまたま Homebrew で管理している pyenv というツールのソースを見ようとしたところ,  /usr/local/Cellar というディレクトリを見かけました。

どうやらHomebrew のコマンドインストール先は /usr/local/Cellar になるみたいですね. beer cellar ってことか. パッケージを formula(製法)と呼んだり, インストール時に ビールのアイコン出てきたり, こういう遊び心は素敵ですね.

そもそも /usr/local とは

Cellar でテンション上がって終わりもアレなので, ついでに色々調べてみました. まずは /usr/local とはどういうディレクトリなのか.

もとからあるディレクトリですし、なんとなく UNIX標準のディレクトリ なんだろうな, ということで原点っぽいものにあたってみましょうか.

Linux Foundation が出している Filesystem Hierarchy Standard (FHS) のPDF.
https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf

/usr/local に関しては以下の記述があります.

The /usr/local hierarchy is for use by the system administrator when installing software locally. It needs to be safe from being overwritten when the system software is updated. It may be used for programs and data that are shareable amongst a group of hosts, but not found in /usr. Locally installed software must be placed within /usr/local rather than /usr unless it is being installed to replace or upgrade software in /usr. 8

ざっくり言えば, システム管理者が自分でインストールするソフトウェアが配置される場所ということですね.

/usr にはシステム自身がインストールしたものを入れると. システム管理者が意図的に入れたものとシステムが自ら入れたものとを分けることによって, 勝手に上書きされることを防いでいるようです.

/usr/local/Cellar の中身

上述の通りで、ここには Homebrew がインストールしたパッケージ群が入ってきます. ぼくの環境だと, pyenv とか jq とか fish とか. 色々入ってますね.

さてここで素朴な疑問. ここにファイルが配置されているということは, /usr/local/Cellar の各ライブラリに対してパスが通っているのかしらと.

まあありえないよなと思いながらパスを出力.

はい, Cellar の Ce の字も出てこないですね.

ふーんと思って何の気なしに /usr/local/bin に ls -l してみたら, なんとなんと.

なるほど, シンボリックリンク貼ってたんですね.

つまり Homebrew は, /usr/local/Cellar にパッケージインストールをしつつ, 同時に /usr/local/binにリンクを貼ることで, パスを追加することなく動くようにしていたわけですね.

言われてみればそらそうかという感じですが, よくできていらっしゃる.

これからもお世話になります ( ^ω^ )

シェアする

  • このエントリーをはてなブックマークに追加

フォローする