Homebrew 是什么?
Homebrew 是 macOS 和 Linux 上非常流行的开源包管理器,可以理解为一个命令行版本的应用商店。它是相对安全的,如果你知道自己正在下载什么。起码目前 Homebrew 上不存在恶意包(All Formulae)。
Homebrew complements macOS (or your Linux system).
术语
讲真的,Homebrew 术语有点羞涩难懂,本身有自制酿酒之意,诸如 Formula、Cask 等也是与酿酒相关的。
术语 | 意译 | 说明 |
---|---|---|
formula | 配方 | 表示安装包的描述文件。复数为 formulae。 |
cask | 木桶 | 装酒的器具,表示具有 GUI 界面的原生应用。 |
keg | 小桶 | 表示某个包某个版本的安装目录,比如 /usr/local/Cellar/foo/0.1 。 |
Cellar | 地窖 | 存放酒的地方,表示包的安装目录,比如 /usr/local/Cellar 。 |
Caskroom | 木桶间 | 表示类型为 Cask 的包的安装目录,比如:/usr/local/Caskroom 。 |
tap | 水龙头 | 表示包的来源,也就是镜像源。 |
bottle | 瓶子 | 表示预先编译好的包,下载好直接使用。 |
Related Link: Homebrew Terminology, Simplifying Homebrew terminology.
组成
Homebrew 由以下几部分组成。
名称 | 说明 |
---|---|
brew | Homebrew 源代码仓库 |
homebrew-core | Homebrew Core 仓库 |
homebrew-cask | Homebrew Cask 仓库,提供 macOS 应用和大型二进制文件的安装 |
homebrew-bottles | Homebrew 预编译二进制软件包与软件包元数据文件 |
homebrew-cask-versions | Homebrew Cask 其他版本 (alternative versions) 软件仓库,提供使用人数多的、需要的版本不在 Cask 仓库中的应用。 |
homebrew-services | 与 brew services 有关的文件,用于在 macOS (launchctl) 与 Linux (systemctl) 上管理 brew 安装的服务。 |
Homebrew 安装
本文以 macOS 为例。
复制以下命令,粘贴到「终端」应用回车执行,等待完成即可。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
如果没有 🪜 下载很慢的话,可以使用国内的安装脚本。
$ /bin/bash -c "$(curl -fsSL https://mirrors.ustc.edu.cn/misc/brew-install.sh)"
如果此前没有安装过 Xcode Command Line Tools,上述过程会提示安装,按回车耐心等待安装完成。
Related link: macOS Requirements.
==> The Xcode Command Line Tools will be installed.
Press RETURN/ENTER to continue or any other key to abort:
也可先自行安装 Xcode Command Line Tools,再安装 Homebrew。
$ xcode-select --install
完成后可使用 brew -v
命令,若有输出版本号,表示已安装成功,可忽略以下环境变量配置步骤。
$ brew -v
Homebrew 4.1.22
Homebrew/homebrew-core (git revision a58688396f3; last commit 2023-12-02)
如果出现如下问题,则需要配置环境变量。
$ brew -v
brew:command not found
执行 which $SHELL
确认你的 macOS 的默认 Shell 是哪个?
$ which $SHELL
/bin/zsh
通常是 zsh
或 bash
,对应的配置文件为 ~/.zshrc
或 ~/.bash_profile
。
从 macOS Catalina 开始,Mac 将使用
zsh
作为默认登录 Shell 和交互式 Shell,详见。
下文以
zsh
为例,如果你使用其他 Shell,涉及到.zshrc
请自行调整为你的配置文件名称。
# 添加环境变量至 .zshrc
$ echo 'export PATH="/usr/local/bin:/usr/local/sbin:/opt/homebrew/bin:/opt/homebrew/sbin:$PATH"' >> ~/.zshrc
# 刷新环境变量
$ source ~/.zshrc
完了之后,再执行 brew -v
应该就能正常输出版本号了。
Homebrew 升级指南
如果首次安装,可忽略本节内容。
自 4.0 起,有一些变化:
默认使用从 Formulae.brew.sh 下载的 JSON 文件进行包的安装,而不是本地
homebrew/core
和homebrew/cask
源。可以考虑使用brew untap homebrew/core
和brew untap homebrew/cask
来节省一些空间(除非你正在开发包)。可以考虑将
HOMEBREW_NO_INSTALL_FROM_API
移除(如果设置过)。可以考虑将
HOMEBREW_API_DOMAIN
设为指定镜像源(如果使用新的安装方式)。自动运行
brew update
的频率由5min
改为24h
。可以重新考虑是否需要设置HOMEBREW_NO_AUTO_UPDATE
、HOMEBREW_AUTO_UPDATE_SECS
了(如果设置过)。
如果想安装了 4.0 及更新版本,又想沿用以前的安装方式,可以设置环境变量:
$ echo 'export HOMEBREW_NO_INSTALL_FROM_API=1' >> ~/.zshrc
如果你使用 3.3.0 ~ 3.6.0 之间的版本,想要使用全新的 JSON API 来安装包,可以设置环境变量:
$ echo 'export HOMEBREW_INSTALL_FROM_API=1' >> ~/.zshrc
自 4.0 起为默认行为,无需设置。
Related Link:
Homebrew 源切换
安装后,如果使用 brew install
、brew upgrade
、brew update
较慢,可以考虑切换为国内的镜像源,比如:
以 USTC 镜像源为例。
如果使用 4.x 最新的 JSON API 安装方式(推荐),添加以下环境变量配置:
$ echo '
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.ustc.edu.cn/brew.git"
export HOMEBREW_API_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/api"
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/bottles"
' >> ~/.zshrc
如果使用 4.0 之前版本,或者使用 4.x 但又想用此前的安装方式,添加以下环境变量配置:
$ echo '
export HOMEBREW_NO_INSTALL_FROM_API=1
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.ustc.edu.cn/brew.git"
export HOMEBREW_API_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/api"
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/bottles"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.ustc.edu.cn/homebrew-core.git"
export HOMEBREW_CASK_GIT_REMOTE="https://mirrors.ustc.edu.cn/homebrew-cask.git"
'>> ~/.zshrc
若要重置为官方镜像源,移除以上环境变量即可。
另外,如不希望 Homebrew 收集匿名数据,可以通过设置环境变量关闭:
$ echo 'export HOMEBREW_NO_ANALYTICS=1' >> ~/.zshrc
Related Link: Anonymous Analytics.
Homebrew 自动更新
默认情况下,在执行 brew install
、brew upgrade
、brew tap
之前,每隔第一段时间会自动执行 brew update
以获取最新的 Homebrew 版本。
在 4.0 起自动执行频率为 24h
,如果开启了 HOMEBREW_NO_INSTALL_FROM_API=1
频率为 5min
。可通过以下环境变量完全禁用、设置时间间隔。
$ echo '
export HOMEBREW_NO_AUTO_UPDATE=1
export HOMEBREW_AUTO_UPDATE_SECS=86400
' >> ~/.zshrc
这就是每次安装/更新包时,先出现
Downloading https://formulae.brew.sh/api/formula.jws.json
的原因。这个 JSON 文件有 4M 多,如果加上默认的镜像源,不慢才怪。
Homebrew 相关路径
相关命令
# 显示 Homebrew 本地的 Git 仓库
$ brew --repo
# 显示 Homebrew 安装路径
$ brew --prefix
# 显示 Homebrew Cellar 路径
$ brew --cellar
# 显示 Homebrew Caskroom 路径
$ brew --caskroom
# 缓存路径
$ brew --cache
Homebrew 默认安装路径如下:
- macOS ARM:
/opt/homebrew
- macOS Intel:
/usr/local
Related Link: Discussion: longterm Homebrew prefix on Apple Silicon Macs
以 brew install git
为例:
Homebrew 将 git 下载至
/usr/local/Cellar/git/<version>/
目录下,其二进制文件在/usr/local/Cellar/git/<version>/bin/git
。Homebrew 为
/usr/local/Cellar/git/<version>/bin/git
创建了一个软链文件至/usr/local/bin
里。
macOS ARM 的路径对应是:
/opt/homebrew/Cellar/git/<version>/
/opt/homebrew/Cellar/git/<version>/bin/git
/opt/homebrew/bin
。这也是 macOS ARM 要将
/opt/homebrew/bin
添加到PATH
环境变量的原因。
当执行 brew uninstall
时,会将 /usr/local/Cellar
下对应包目录删除,对应的链接关系也会移除。
当执行 brew cleanup
时,会将 /usr/local/Cellar
所有包里的旧版本,只保留最新版本。
Homebrew Cask 的区别
可以简单地将 Homebrew 的包分为命令行工具、GUI 应用两类。
$ brew install <package-name> # 安装
$ brew uninstall <package-name> # 卸载
$ brew reinstall <package-name> # 重装
如安装的是 GUI 应用,加上
--cask
参数。比如brew install docker --cask
。
如需强制卸载,加上
--force
参数。
使用 brew search
命令可以看到「Formulae」和「Casks」两类:
- Formulae:一般是那些命令行工具、开发库、字体、插件等不含 GUI 界面的软件。
- Casks:是指那些含有 GUI 图形化界面的软件,比如 Chrome、FireFox 等。
$ brew search google
==> Formulae
aws-google-auth google-sparsehash
google-authenticator-libpam google-sql-tool
google-benchmark googler
google-go googletest
google-java-format
==> Casks
google-ads-editor
google-analytics-opt-out
google-backup-and-sync
...
Related Link: Homebrew Cask
Homebrew 常用命令
检查
用于检查 Homebrew 当前配置是否合理,或者某些包存在的问题等。
$ brew doctor
搜索
支持模糊搜索。
$ brew search <keyword>
更新包
$ brew upgrade # 更新所有已安装的包
$ brew upgrade <package-name> # 更新指定包
列出已安装的包
$ brew list # 所有的软件,包括 Formulae 和 Cask
$ brew list --formulae # 所有已安装的 Formulae
$ brew list --cask # 所有已安装的 Casks
$ brew list <package-name> # 列举某个 Formulate 或 Cask 的详细路径
列出可更新的包
$ brew outdated
锁定某个不想更新的包
$ brew pin <package-name> # 锁定指定包
$ brew unpin <package-name> # 取消锁定指定包
清理旧包
$ brew cleanup # 清理所有旧版本的包
$ brew cleanup <package-name> # 清理指定的旧版本包
$ brew cleanup -n # 查看可清理的旧版本包
查看已安装包的依赖
$ brew deps --installed --tree
查看包的信息
$ brew info <package> # 显示某个包信息
$ brew info # 显示安装的软件数量、文件数量以及占用空间