Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Homebrew 使用详解 #9

Open
toFrankie opened this issue Feb 25, 2023 · 0 comments
Open

Homebrew 使用详解 #9

toFrankie opened this issue Feb 25, 2023 · 0 comments
Labels
2017 2017 年撰写 Homebrew 与 Homebrew 相关的文章 Mac 与 Mac、macOS 相关的文章

Comments

@toFrankie
Copy link
Owner

toFrankie commented Feb 25, 2023

配图源自 Freepik

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

通常是 zshbash,对应的配置文件为 ~/.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/corehomebrew/cask 源。可以考虑使用 brew untap homebrew/corebrew untap homebrew/cask 来节省一些空间(除非你正在开发包)。

  • 可以考虑将 HOMEBREW_NO_INSTALL_FROM_API 移除(如果设置过)。

  • 可以考虑将 HOMEBREW_API_DOMAIN 设为指定镜像源(如果使用新的安装方式)。

  • 自动运行 brew update 的频率由 5min 改为 24h。可以重新考虑是否需要设置 HOMEBREW_NO_AUTO_UPDATEHOMEBREW_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 installbrew upgradebrew 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 installbrew upgradebrew 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 为例:

  1. Homebrew 将 git 下载至 /usr/local/Cellar/git/<version>/ 目录下,其二进制文件在 /usr/local/Cellar/git/<version>/bin/git

  2. 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                     # 显示安装的软件数量、文件数量以及占用空间

References

@toFrankie toFrankie added Mac 与 Mac、macOS 相关的文章 Homebrew 与 Homebrew 相关的文章 labels Feb 25, 2023
@toFrankie toFrankie added the 2017 2017 年撰写 label Apr 26, 2023
@toFrankie toFrankie changed the title Homebrew 使用详解,macOS 的第二个 Mac App Store Homebrew 使用详解 Dec 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
2017 2017 年撰写 Homebrew 与 Homebrew 相关的文章 Mac 与 Mac、macOS 相关的文章
Projects
None yet
Development

No branches or pull requests

1 participant