文章

Homebrew 酿酒术:精心调配你的 macOS 软件环境

Brew Logo Homebrew 意为“家酿”,是一款用 Ruby 开发的包管理器。它像酿酒一样,让用户轻松“酿造”和管理软件环境,无需担心复杂的配置。

通过 Homebrew,用户可以轻松安装、更新和卸载 UNIX 工具和软件包,实现个性化软件管理。目前支持 macOS 和 Linux 系统。

在本文中,将详细介绍 Homebrew 的安装/卸载、模块组成、术语、常用命令等,助你快速上手,并优化你的 macOS (或 Linux) 软件环境。

安装

Homebrew 官网的安装说明位于主页,推荐复制粘贴官网的安装命令。

macOS 环境要求

  • 64-bit Intel CPU 或 Apple Silicon CPU
  • macOS Monterey 12.0 或更高版本
  • Xcode 的命令行工具 (CLT),可通过 xcode-select --installdeveloper.apple.comXcode 安装
  • 为了安装,我们需要 Bourne-again shell (bash)

命令行安装

需要命令行安装可在终端执行以下命令:

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

该脚本会将 Homebrew 安装到默认的路径:

  • macOS ARM: /opt/homebrew
  • macOS Intel: /usr/local
  • Linux: /home/linuxbrew/.linuxbrew

Homebrew 安装完成后,当你进行 brew install 和其他命令时,不需要使用 sudo因为 sudo 很危险

注意:👉👉👉 查看更多安装方式点击这里 👈👈👈

.pkg 安装

如果使用 macOS,可以下载 .pkg 安装,下载地址:Homebrew’s latest GitHub release

macOS .pkg 安装器会将 Homebrew 安装到默认的路径:

  • macOS ARM: /opt/homebrew
  • macOS Intel: /usr/local

Git 镜像安装

如果连接到 GitHub.com 时遇到问题,可以使用 Git 镜像进行 Homebrew 安装和 brew update,方法是使用以下脚本在 shell 环境中设置 HOMEBREW_BREW_GIT_REMOTEHOMEBREW_CORE_GIT_REMOTE:

1
2
3
export HOMEBREW_BREW_GIT_REMOTE="..."  # 设置 Homebrew/brew 的 Git 镜像
export HOMEBREW_CORE_GIT_REMOTE="..."  # 设置 Homebrew/homebrew-core 的 Git 镜像
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

如果未设置相应的环境变量,则将使用默认的 Git 远程仓库。

推荐几个镜像站:优化使用体验

无人值守安装

如果需要非交互式安装 Homebrew 而不提示输入密码 (例如在自动化脚本中),可在安装命令前添加 NONINTERACTIVE=1

1
NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

解压到任何地方安装(不支持)

从技术上讲,你可以将 Homebrew 仓库下载 (或 git clone) 到任何地方安装。虽然官方不支持这样做,但还是给出了安装教程,如果需要请查看 Untar anywhere (unsupported)


  • 下载 安装脚本 并运行 /bin/bash install.sh --help 可以查看更多安装选项。
  • 更新升级 Homebrew 可使用 brew update 命令。

卸载

卸载 Homebrew 需要在终端执行以下命令:

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"

如果需要以非交互方式卸载 Homebrew (例如在自动化脚本中),可在卸载命令前添加 NONINTERACTIVE=1

1
NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"

下载 卸载脚本 并运行 /bin/bash uninstall.sh --help 可以查看更多卸载选项。

如果 .zshrc.bash_profile 配置有环境变量需要手动删除。例如:HOMEBREW_BOTTLE_DOMAIN。删除完成后,执行:source ~/.zshrcsource ~/.bash_profile

模块组成

Homebrew 作为一款广受欢迎的包管理工具,为 macOS 和 Linux 用户提供了一个简洁且高效的方式来安装、更新、卸载和管理各种软件包。以下是 Homebrew 最新版本的模块组成:

核心模块

  1. brew
    • 功能:Homebrew 的主要命令行工具,用于与用户进行交互。
    • 描述:它提供了软件包的安装、卸载、更新、查询等核心功能。用户通过 brew 命令可以轻松地管理他们的软件包。
  2. homebrew-core
    • 功能:Homebrew 的核心软件仓库。
    • 描述:这个仓库包含了大量常用的软件包,每个软件包都有一个对应的 Formula(安装脚本),定义了软件的获取、编译和安装过程。

扩展模块

  1. homebrew-cask
    • 功能:专门用于安装和管理 macOS 上的图形界面应用程序。
    • 描述:这个仓库包含了大量常用的 Cask(安装脚本),允许用户通过简单的命令安装和管理各种 macOS 图形应用程序。
  2. homebrew-bottles
    • 功能:提供了预编译软件包(称为“瓶子”)的存储和管理功能。
    • 描述:这些预编译的软件包,可以让用户避免从源代码编译软件的繁琐步骤,从而加快软件的安装速度。homebrew-bottles 为用户提供了一个快速获取和使用预编译软件包的途径。

    注意:homebrew-bottles 不是一个独立的仓库,虽然没有在 GitHub 集中管理,但你可以在 Homebrew 的官方网站上找到相关信息。

辅助工具与扩展

  1. homebrew-services
    • 功能:提供了一套管理工具,用于控制和管理通过 Homebrew 安装的服务。
    • 描述:这个工具使得用户可以轻松地启动、停止、重启或查看通过 Homebrew 安装的服务的状态,如数据库、Web 服务器等。它简化了服务的管理过程,提高了用户的工作效率。
  2. homebrew-cask-versions
    • 功能:允许用户安装和管理特定版本的 macOS 图形界面应用程序。
    • 描述:这个扩展为用户提供了安装旧版应用程序的能力,满足了用户对特定版本软件的需求。

    注意:随着 Homebrew 的更新,此功能已整合到 homebrew-cask 中。

术语

Homebrew 命名灵感来源于酿酒工艺,且使用的术语也与酿酒紧密相连。下面是我们对一些关键术语的解析:

  1. formula (配方):
    • 描述:formula 定义了包的安装方法、源代码位置、依赖关系以及如何编译和安装。用户通过 brew install <formula> 命令,即可根据“配方”自动下载、编译并安装包。
    • 示例:/opt/homebrew/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/f/foo.rb
    • 酿酒术:“配方”决定酒的原料和酿造方法。
  2. cask (木桶):
    • 描述:cask 是一个扩展,用于安装和管理 macOS 上的图形界面程序。用户通过 brew install --cask <cask> 命令,即可自动下载、安装应用程序。
    • 示例:/opt/homebrew/Homebrew/Library/Taps/homebrew/homebrew-cask/Casks/b/bar.rb
    • 酿酒术:“木桶”用于存放和陈化葡萄酒。
  3. prefix (前缀):
    • 描述:prefix 指的是 Homebrew 安装路径,用户通过 brew --prefix 命令,即可查看。它提供了一个集中的安装环境,确保了软件包的组织性和一致性。
    • 示例:/opt/homebrew
    • 酿酒术:“前缀”指的是酒窖的区域。
  4. keg (小桶):
    • 描述:keg 用于存放给定版本的 formula 目录。
    • 示例:/opt/homebrew/Cellar/foo/0.1
    • 酿酒术:“小桶”是用来存放酒的容器。
  5. rack (酒架):
    • 描述:是指存放所有 kegs 的目录。
    • 示例:/opt/homebrew/Cellar/foo
    • 酿酒术:“酒架”用于摆放酒瓶。
  6. keg-only (仅限桶装):
    • 描述:如果一个 formula 没有符号链接到 Homebrew’s prefix 中,那么它就是 keg-only。
    • 示例:openjdk formula
  7. opt prefix (选择前缀):
    • 描述:已安装软件包的符号链接目录,方便访问。指向 keg 的 active 版本的符号链接。
    • 示例:/opt/homebrew/opt/foo
  8. Cellar (酒窖):
    • 描述:Cellar 是 Homebrew 的核心存储区域,存储所有已安装包的地方。也就是 rack 的安装目录。
    • 示例:/opt/homebrew/Cellar
    • 酿酒术:酿酒中,“酒窖”是存放和陈化酒的地方。
  9. Caskroom (木桶间):
    • 描述:存放和管理 cask 包的目录
    • 示例:/opt/homebrew/Caskroom
    • 酿酒术:酿酒中,“木桶间”是存放和管理木桶的地方。
  10. tap (水龙头):
    • 描述:tap 代表第三方软件包仓库 (通常是 Git 存储库)。通过 tap,用户可以添加第三方仓库,从而扩展 Homebrew 的软件包来源。
    • 示例:/opt/homebrew/Homebrew/Library/Taps/homebrew/homebrew-core
    • 酿酒术:酿酒中,“水龙头”用于从酒桶中取出酒液。
  11. bottle (瓶装):
    • 描述:bottle 允许用户直接下载和安装已经编译好的二进制包,无需从源代码开始编译,大大加快了安装速度。
    • 示例:qt--6.5.1.ventura.bottle.tar.gz
    • 酿酒术:酿酒中,“瓶装”指的是已经瓶装好,可直接销售的美酒。

相关链接:Manpage Terminology, Cookbook Terminology

常用命令

  • 有关完整的命令列表,请查看 COMMANDS
  • 概要:

    brew --version
    brew command [--verbose|-v] [options] [formula|cask] …

    formulacask 通常是要安装的软件包名称。它还有更多语法,请看 SPECIFYING FORMULAESPECIFYING CASKS

安装包 install

install [options] formula|cask […]

安装一个 formulacask详细教程

1
2
3
4
brew install wget                   # 先尝试安装 formula,没有的话再尝试安装 cask 软件包
brew install --formula wget         # 指定安装一个 formula 软件包
brew install --cask firefox         # 指定安装一个 cask 软件包
brew install --verbose --debug wget # 安装失败时使用这条指令重新安装,查看错误信息

重新安装包 reinstall

reinstall [options] formula|cask […]

重新安装 formulacask,如果之前有安装过,先卸载再安装。详细教程

1
2
3
brew reinstall wget           # 重新安装 wget,软件包选择顺序先 formula 再 cask
brew reinstall --formula wget # 重新安装 formula 软件包
brew reinstall --cask firefox # 重新安装 cask 软件包

卸载包 uninstall, remove, rm

uninstall, remove, rm [options] installed_formula|installed_cask […]

卸载一个 formulacask详细教程

1
2
3
4
brew uninstall wget           # 卸载本地已经安装的软件包
brew uninstall --formula wget # 卸载本地已安装的 formula 软件包
brew uninstall --cask firefox # 卸载本地已安装的 cask 软件包
brew unistall wget --force    # 彻底卸载已安装包的所有版本,并且在删除文件时忽略错误

已安装的包 list, ls

list, ls [options] [installed_formula|installed_cask …]

列出所有已安装的 formulacask详细教程

1
2
3
4
5
6
7
8
brew list                # 查看所有已安装的软件包名称,包括 formula 和 cask
brew list wget           # 查看已安装的软件包 wget 的文件信息
brew list --formula      # 查看所有已安装的 formula 软件包名称
brew list --formula wget # 查看已安装的软件包 wget 的文件信息
brew list --cask         # 查看所有已安装的 cask 软件包名称
brew list --cask firefox # 查看已安装的软件包 firefox 的文件信息
brew list --version      # 查看所有已安装的软件包的名称及版本信息
brew list --version wget # 查看已安装的软件包 wget 的名称及版本信息

search, -S [options] text|/regex/ […]

caskformula 执行搜索。如果 text 两侧有/,则它被解释为正则表达式。搜索范围在本地远程,已安装会显示绿色的勾。详细教程

1
2
3
4
brew search wget           # 搜索本地远程仓库的软件,已安装会显示绿色的勾
brew search /wget/         # 使用正则表达式搜软件
brew search --formula wget # 只搜索 formula 下的 wget 软件包
brew search --cask firefox # 只搜索 cask 下的 firefox 软件包

包信息 info, abv

info, abv [options] [formula|cask …]

查看已安装包的简要统计信息。如果有 formulacask,则显示它的信息摘要。详细教程

1
2
3
4
brew info      # 可以统计出本地安装了多少个 formula 软件包,共有多少文件,占用多少空间
brew info wget # 可以看到软件包的概况,比如它来源于哪里,构建工具是什么,依赖有哪些,和哪些软件包有冲突,近期的分析统计数据
brew info --formula wget
brew info --cask firefox

打开官网 home, homepage

home, homepage [--formula] [--cask] [formula|cask …]

在浏览器中打开 formulacask 的主页。如果不提供参数,则打开 Homebrew 自己的主页。详细教程

1
2
3
4
brew home                # 打开 Homebrew 官网
brew home wget           # 打开 wget 官网
brew home --formula wget # 打开 wget 官网
brew home --cask firefox # 打开 firefox 官网

更新升级 update

update [options]

使用 git 从 GitHub 获取最新版本的 Homebrew 和所有 formulae 进行升级安装,并显示已过时的软件包。详细教程

1
brew update # 升级 Homebrew,并显示已过时的软件包

已过时的包 outdated

outdated [options] [formula|cask …]

查看本地已安装,且版本已过时的 formulaecasks详细教程

1
2
3
4
5
6
brew outdated                # 查看已经过时的软件包
brew outdated wget           # 查看已经过时的 wget 包
brew outdated --formula      # 查看所有已经过时的 formula 包
brew outdated --formula wget # 查看 wget 是否已过时
brew outdated --cask         # 查看所有已经过时的 cask 包
brew outdated --cask firefox # 查看 firefox 是否已过时

升级包 upgrade

upgrade [options] [installed_formula|installed_cask …]

升级已过时的 cask 和过时的、未固定的 formula。如果指定了 caskformula,则仅升级给定的 caskformula kegs (除非它们已固定;请查看 pinunpin)。详细教程

如果未设置 HOMEBREW_NO_INSTALL_CLEANUP,升级完成后会自动执行 brew cleanup

1
2
3
4
brew upgrade                # 更新所有已过时的软件包
brew upgrade wget           # 更新指定的 wget 软件包
brew upgrade --formula wget # 更新指定的 wget 软件包
brew upgrade --cask firefox # 更新指定的 firefox 软件包

固定 pin

pin installed_formula […]

固定指定的 formula,防止在发出 brew upgrade formula 命令时升级它们。取消固定请查看 unpin详细教程

1
brew pin wget # 禁止升级 wget

注意:依赖于更新版本的固定 formula 的其他软件包可能无法正确安装或运行。

取消固定 unpin

unpin installed_formula […]

取消固定 formula,允许它们通过 brew upgrade formula 进行升级。固定请查看 pin详细教程

1
brew unpin wget # 解除禁止升级 wget 的限制

清理 cleanup

cleanup [options] [formula|cask …]

删除所有 formulacask 的陈旧的锁文件和过时的下载,并删除已安装 formula 的旧版本。如果指定了参数,则仅对给定的 formulacask 执行此操作。详细教程

注意:

  • 默认会删除所有超过 120 天的下载。这可以通过 HOMEBREW_CLEANUP_MAX_AGE_DAYS 进行调整
  • 如果被清理的软件包不是最新版本,Homebrew 会给出警告,这个警告可忽略

    1
    2
    3
    4
    5
    
    $ zstd --version
    *** Zstandard CLI (64-bit) v1.5.5, by Yann Collet ***
    
    $ brew cleanup zstd
    Warning: Skipping zstd: most recent version 1.5.6 not installed
    
1
2
3
4
5
brew cleanup                # 针对所有已安装软件包执行清理动作
brew cleanup -n             # 显示要删除的内容,但实际上不删除任何内容
brew cleanup wget           # 针对已安装的 wget 执行清理动作
brew cleanup --formula wget # 针对已安装的 wget 执行清理动作
brew cleanup --cask firefox # 针对已安装的 firefox 执行清理动作

体检 doctor, dr

doctor, dr [--list-checks] [--audit-debug] [diagnostic_check …]

检查你的系统是否存在潜在问题。如果发现任何潜在问题,将以非零状态退出。详细教程

1
brew doctor  # 检查系统是否存在潜在问题

帮助 help

help [command …]

输出 brew command 的使用说明。相当于 brew --help command详细教程

1
2
brew --help      # 显示 brew 命令的使用说明
brew --help info # 显示 info 命令的使用说明

日志 log

log [options] [formula|cask]

显示 formula or caskgit log,如果没有指定 formula or cask,则显示 Homebrew 存储库的日志。详细教程

1
2
brew log           # 显示 Homebrew 存储库的日志
brew log --formula # 显示 formula 存储库的日志

配置信息 config

config, --config

显示对调试有用的 Homebrew 和系统配置信息。如果你提交错误报告,将需要提供这些信息。详细教程

1
brew config  # 显示 Homebrew 和 macOS 系统配置信息

路径 --cache, --caskroom, --cellar, --env, --prefix, --repo

--cache [options] [formula|cask …]

显示 Homebrew 的下载缓存。如果指定了 formula,则显示用于缓存 formula 的文件或目录。详细教程

注意:

Homebrew 使用 HOMEBREW_CACHE 目录作为下载缓存。默认:

  • macOS: $HOME/Library/Caches/Homebrew
  • Linux: $XDG_CACHE_HOME/Homebrew$HOME/.cache/Homebrew
1
2
brew --cache      # 显示 Homebrew 的下载缓存路径
brew --cache wget # 显示 wget 的下载缓存路径

--caskroom [cask …]

显示 Homebrew 的 Caskroom 路径。如果指定了 cask,则显示 Caskroom 中 cask 的安装位置。详细教程

1
brew --caskroom # 显示 Homebrew's Caskroom 路径

--cellar [formula …]

显示 Homebrew 的 Cellar 路径。默认值: $(brew --prefix)/Cellar,如果该目录不存在,则为 $(brew --repository)/Cellar。如果指定了 formula,则显示 Cellar 中 formula 的安装位置。详细教程

1
brew --cellar # 显示 Homebrew's Cellar 路径

--env, environment [--shell=] [--plain] [formula …]

显示 Homebrew 的构建环境。详细教程

1
brew --env # 显示 Homebrew 的构建环境

--prefix [--unbrewed] [--installed] [formula …]

显示 Homebrew 的安装路径。默认:

  • macOS ARM: /opt/homebrew
  • macOS Intel: /usr/local
  • Linux: /home/linuxbrew/.linuxbrew

如果指定了 formula,则显示 formula 已安装或将要安装的位置。详细教程

1
brew --prefix # 显示 Homebrew 安装路径

--repository, --repo [tap …]

显示 Homebrew 的 Git 存储库所在的位置。如果指定了 user/repo,则显示 tap user/repo 的目录所在位置。详细教程

1
brew --repo # 显示 Homebrew 本地的 Git 仓库

版本 --version, -v

--version, -v

显示 Homebrew、Homebrew/homebrew-core 和 Homebrew/homebrew-cask (tap) 的版本号。详细教程

1
brew --version # 显示 Homebrew 版本

优化使用体验

对于国内用户来说,优化 Homebrew 的使用体验主要需要解决网络问题,因为 Homebrew 的默认源位于国外,可能会受到网络访问限制或速度慢的影响。

  1. 国内镜像源:

    可以将源站切换到国内镜像,从而加速下载和更新。

    推荐几个国内 Homebrew 镜像站:

    1. 阿里云官方镜像站
    2. 腾讯软件源
    3. 中国科学技术大学开源软件镜像
    4. 清华大学开源软件镜像站
    5. 北京外国语大学开源软件镜像站
  2. Hosts 加速:

    1. 通过 www.ipaddress.com 查询 raw.githubusercontent.com 对应 IP 地址,然后添加到 /etc/hosts 文件中。
    2. 设置 DNS 服务,如果默认用的国内 DNS 服务,可能存在污染。可以换到 Google Public DNS
    3. 配置完成之后再执行安装和更新操作。

    手动查询 Github 相关 IP 地址会比较麻烦,这里推荐一个仓库,里面提供了最新的 GitHub Hosts 地址。 然后再推荐使用 SwitchHosts 进行 hosts 管理会比较简单,这里查看详细 使用说明

  3. 代理或 VPN:

    可以使用代理服务器或 VPN 来加速资源的访问。但请注意,使用代理或 VPN 可能涉及法律风险,请确保你的使用方式合法。

  4. 定期清理和更新:

    定期使用 brew cleanup 清理旧版本,以及使用 brew updatebrew upgrade 更新 Homebrew 和已安装的软件包。

注意事项

在使用 Homebrew 时,有几点需要注意:

  1. 确保你的 macOS 系统版本与 Homebrew 兼容。
  2. 定期运行 brew update 以保持 Homebrew 和 formula 的最新版本。
  3. 定期使用 brew doctor 检查系统环境。
  4. 当安装新软件包时,注意检查其依赖关系以避免潜在的冲突。
  5. 对于 Keg-only 的软件包,需要使用特定的命令来调用它们。

结语

Homebrew 是个强大的包管理器,也是一个蕴含酿酒文化的艺术品。学会使用 Homebrew,你能精细管理你的 macOS 软件环境,提升效率,增添乐趣。希望本文能助你更深入理解和使用 Homebrew,享受自制软件的快乐!

注意:

截止本文发布时 (2023-12-23),Homebrew 版本为 4.2.0,本文所有案例都实践在此版本下。

本文由作者按照 CC BY 4.0 进行授权

© Liam. 保留部分权利。

本博客由 Jekyll 生成,使用 Chirpy 作为主题