Homebrew 使用詳解

配圖源自 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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容