1.2 目录布局与核心术语

原文链接: https://docs.brew.sh/Manpage

刚接触 brew 时,最容易困惑的不是命令本身,而是一堆“酒馆”式的术语:Cellar、keg、rack、tap、bottle……其实这些名字背后是一套非常简单的文件布局。下面以 Apple Silicon 上的默认前缀 /opt/homebrew 为例说明。

一张术语表

术语含义在磁盘上的典型位置
formula(配方)从上游源码构建软件的 Homebrew 包定义由 tap 提供
cask(木桶)安装上游预编译、已签名二进制(应用、字体、插件)的 Homebrew 包定义由 tap 提供
prefix(前缀)Homebrew 被安装到的根目录/opt/homebrew 或 /usr/local
keg某个 formula 特定版本的安装目录/opt/homebrew/Cellar/foo/0.1
rack存放同一 formula 一个或多个版本 keg 的目录/opt/homebrew/Cellar/foo
keg-only不符号链接进 prefix 的 formula只存在于 Cellar
opt prefix指向某个 keg 当前激活版本的符号链接目录/opt/homebrew/opt/foo
Cellar存放所有 keg 的目录/opt/homebrew/Cellar
Caskroom存放所有已安装 cask 的目录/opt/homebrew/Caskroom
external command(外部命令)定义在 Homebrew/brew 官方仓库之外的 brew 子命令由 tap 提供
tap(水龙头)存放 formulae、casks 和/或外部命令的目录(通常是 Git 仓库)/opt/homebrew/Library/Taps
bottle(瓶装)预先构建好的 keg,可直接“倒入”Cellar,无需从源码编译下载后解压到 Cellar

理解 keg 与 Cellar

Homebrew 安装某个 formula 时,会把该版本完整安装到自己的 keg:

1
/opt/homebrew/Cellar/<软件名>/<版本号>/

接着它会把 bin、lib 等目录里的文件符号链接到 prefix:

1
/opt/homebrew/bin/<可执行文件>

这样你的 shell 只要把 /opt/homebrew/bin 放进 PATH,就能直接使用 brew 安装的命令。

opt prefix 则是一个永远指向“当前激活 keg”的符号链接。即使你升级了版本,/opt/homebrew/opt/foo 仍会指向最新激活的 keg,因此脚本和构建配置总是可以稳定引用它。

keg-only 的含义

某些 formula(例如 openssl)被标记为 keg-only,意思是它们只装入 Cellar,不会符号链接进 prefix。这样做的目的大多是避免与 macOS 系统自带的同名库冲突。运行 brew info <formula> 可以看到为什么它被标记为 keg-only,以及如何把它加入 PATH。详见 3.2 keg-only 与链接机制。

brew 本身放在哪里

可以用下面的命令查看各种关键路径:

1
2
3
brew --prefix        # 输出 prefix,例如 /opt/homebrew
brew --repository    # 输出 brew 仓库位置
brew --cache         # 输出下载缓存目录,例如 ~/Library/Caches/Homebrew

了解了这套布局后,很多“某个文件到底装到哪”的疑问都能自己解决:brew list <formula> 会列出 formula 安装的文件,brew info <formula> 则显示 keg-only、依赖等详细信息。