1.2 目录布局与核心术语
2 分钟阅读
刚接触 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:
| |
接着它会把 bin、lib 等目录里的文件符号链接到 prefix:
| |
这样你的 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 本身放在哪里
可以用下面的命令查看各种关键路径:
| |
了解了这套布局后,很多“某个文件到底装到哪”的疑问都能自己解决:brew list <formula> 会列出 formula 安装的文件,brew info <formula> 则显示 keg-only、依赖等详细信息。