Homebrew 是 macOS(及 Linux)上最流行的第三方包管理器,由 Max Howell 于 2009 年创建。它的核心设计哲学是"补足 macOS 缺失的包管理功能"——macOS 本身没有类似于 Linux 发行版中 apt 或 yum 那样的官方包管理器,而 Homebrew 正是为了填补这一空白而生。
在其诞生之初,Homebrew 利用 macOS 预装的 Ruby 运行时,通过 Git 仓库来管理软件包的定义(称为 Formula),用 Ruby 编写的领域特定语言(DSL)来描述软件的编译安装过程。这种设计让它迅速获得了开发者的青睐,因为它不需要管理员权限就能将软件安装到 /usr/local 目录下。
2019 年,Homebrew 发布了 2.0.0 版本,这是一个重要的里程碑:Cask 正式成为 Homebrew 的内置部分,不再需要单独安装 brew cask 子命令。同年也正式添加了对 Linux 和 Windows 子系统(WSL)的支持,更名为 Linuxbrew(后回归 Homebrew 品牌)。
2021 年的 3.0.0 版本引入了对 Apple Silicon(ARM)的原生支持,并默认使用 /opt/homebrew 作为安装前缀,以区分 Intel Mac 下的 /usr/local 路径。
核心事实:截至 2026 年,Homebrew 拥有超过 6000 个 Formula 和 5000 个 Cask,是全球开发者首选的 macOS 包管理工具,月活跃用户超过 200 万。
Homebrew 与系统的原生包管理器形成互补关系而非竞争关系:
| 维度 | Homebrew | macOS 原生 | Linux 原生 (apt/yum) |
|---|---|---|---|
| 安装位置 | /usr/local 或 /opt/homebrew | 系统只读卷宗 | /usr/lib, /bin |
| 是否需要 sudo | 不需要 | 需要 | 需要 |
| 包更新速度 | 快(社区维护) | 慢(随系统更新) | 中等(发行版维护) |
| GUI 应用管理 | 支持(Cask) | 不支持 | 部分支持 (Snap/Flatpak) |
| 版本数量 | 6000+ Formulas, 5000+ Casks | 有限 | 50000+ (Debian) |
Homebrew 的所有文件都安装在自己的前缀目录下(/usr/local 或 /opt/homebrew),完全隔离于系统文件。卸载 Homebrew 只需要删除这个目录和几个符号链接,不会对系统造成任何影响。这与系统包管理器深度耦合于操作系统的做法形成了鲜明对比。
Homebrew 不仅仅是 brew install 这一个命令,而是一整套工具链的集合:
firefox-developer-edition)brew services 命令管理后台进程除此之外,Homebrew 生态还包含许多第三方工具:brew bundle(基于 Brewfile 的批量管理,现在是内置命令)、brew file(第三方插件,用于跟踪已安装文件的变更)等。
当你执行 brew install wget 时,Homebrew 实际上经历了以下步骤:
depends_on 声明,递归解析所有依赖Cellar 目录中./configure && make && make install/usr/local/bin 等目录创建符号链接,指向 Cellar 中的实际文件关键概念:Homebrew 的三个核心目录——Cellar(存放所有已安装包的版本化子目录)、Formula(存放所有 Formula 定义文件的 Git 仓库)、Tap(第三方仓库的挂载机制)。理解这三个概念是掌握 Homebrew 的基础。
Homebrew 是 macOS 和 Linux 上不可或缺的包管理工具,它的设计哲学强调"用户目录隔离"和"社区驱动"。其生态包括核心仓库、Cask 图形应用管理、第三方 Tap 以及服务管理工具。理解其"Cellar、Formula、Tap"三要素有助于深入使用 Homebrew。
在 macOS 上安装 Homebrew 非常简单,只需在终端中执行官方提供的安装脚本:
安装过程中系统会要求你确认以下操作:
/usr/local 或 /opt/homebrew)sudo)Homebrew 同样支持 Linux 和 Windows Subsystem for Linux(WSL):
在 Linux 上,Homebrew 的默认安装位置是 /home/linuxbrew/.linuxbrew。安装前需要确保系统已安装以下依赖:build-essential(Ubuntu/Debian)或 Development Tools(CentOS/Fedora)、curl、git、procps。
Homebrew 对系统有最低要求:
| 平台 | 最低版本 | 架构 | 关键依赖 |
|---|---|---|---|
| macOS | Monterey (12) 或更新 | x86_64, arm64 | Xcode CLT, Git |
| Linux | Ubuntu 20.04+ / 对应版本 | x86_64, aarch64 | GCC, Git, curl, make |
| WSL | WSL2 推荐 | x86_64, arm64 | 同 Linux 要求 |
brew doctor 是 Homebrew 维护中最重要命令之一。它会对你的 Homebrew 安装进行全面体检,发现潜在问题并给出修复建议:
建议在每次大规模更新前后运行 brew doctor,确保 Homebrew 处于健康状态。如果 brew doctor 输出了 "Your system is ready to brew",说明一切正常。
Homebrew 的行为可以通过多个环境变量进行配置:
| 环境变量 | 作用 | 示例 |
|---|---|---|
| HOMEBREW_NO_AUTO_UPDATE | 禁止每次运行 brew 命令时自动更新 | export HOMEBREW_NO_AUTO_UPDATE=1 |
| HOMEBREW_BOTTLE_DOMAIN | 设置 Bottle 镜像源地址(对中国用户非常重要) | export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn |
| HOMEBREW_NO_ANALYTICS | 关闭匿名统计上报 | export HOMEBREW_NO_ANALYTICS=1 |
| HOMEBREW_CASK_OPTS | Cask 安装的默认参数(如安装路径) | export HOMEBREW_CASK_OPTS="--appdir=/Applications" |
| HOMEBREW_NO_INSTALL_CLEANUP | 禁止安装后自动清理旧版本 | export HOMEBREW_NO_INSTALL_CLEANUP=1 |
| HOMEBREW_MAKE_JOBS | 设置编译时的并行任务数(默认是 CPU 核心数) | export HOMEBREW_MAKE_JOBS=4 |
对于中国大陆用户,由于网络限制,直接使用 Homebrew 的官方源可能非常缓慢甚至无法连接。配置国内镜像源是必须的步骤:
其他国内可用的镜像源包括:
https://mirrors.tuna.tsinghua.edu.cn/https://mirrors.aliyun.com/https://mirrors.cloud.tencent.com/更换镜像源后需要执行 brew update 使配置生效。注意不要同时混用多个镜像源,以免引起元数据不一致的问题。如果从镜像源切换回官方源,也需要先重置 remote URL。
Homebrew 的安装过程在各平台(macOS、Linux、WSL)上基本一致,但需要注意不同平台的前置依赖。安装后的核心配置包括设置环境变量(尤其是国内用户的镜像源配置)以及通过 brew doctor 验证安装的完整性。正确的镜像源配置可以显著提升国内用户的使用体验。
brew install 是 Homebrew 最常用的命令,用于安装命令行工具和库:
运行 brew install 时,你会看到类似 ==> Downloading、==> Installing、==> Summary 的输出。Homebrew 会优先尝试使用 Bottle(预编译二进制包),如果不可用则回退到源码编译。Bottle 的安装速度远快于源码编译——通常几秒到几十秒,而源码编译可能需要数分钟。
注意:brew uninstall 默认会保留依赖包。要清理不再需要的依赖,可以配合 brew autoremove 使用。
brew update 会拉取 Homebrew 仓库的最新 Formula 定义和 Cask 列表。这相当于 Homebrew 自身的版本更新,不涉及已安装的包:
建议:在每次执行 brew install 之前先运行 brew update,确保安装的是最新版本的软件。如果你觉得更新太频繁,可以设置 HOMEBREW_NO_AUTO_UPDATE=1 环境变量来禁用自动更新,然后手动在合适的时候运行 brew update。
brew info 的输出包含:描述、版本、依赖关系、安装状态、Bottle 可用性、Caveats(注意事项)、License 等信息。
当你安装一个包时,Homebrew 会自动安装其所有依赖。但当你卸载这个包时,这些依赖并不会自动卸载——因为它们可能被其他包共享。时间久了,系统中会积累大量"孤儿依赖"(不再被任何包需要的依赖)。brew autoremove 就是专门用来清理这些孤儿依赖的,可以有效释放磁盘空间。
Homebrew 的核心命令涵盖了包管理器的完整生命周期:搜索(search)、查看信息(info)、安装(install)、列出(list)、升级(upgrade)、卸载(uninstall)、清理(cleanup、autoremove)、依赖分析(deps、uses)。熟练掌握这些命令是高效使用 Homebrew 的关键。
Cask 是 Homebrew 对 macOS 原生 GUI 应用的安装扩展。在 Homebrew 2.0 之前,Cask 是一个独立的项目(brew-cask),需要额外安装。从 2.0 版本开始,Cask 被集成到了 Homebrew 核心中,成为内置功能。
每个 Cask 本质上是一个 Ruby 脚本,定义了如何从一个给定的下载地址(通常是 .dmg、.pkg、.zip 或 .app 文件)下载应用并将其安装到 /Applications 目录中。Cask 不管理应用的更新——应用的更新通常由应用自身的内置更新机制负责。
以下是一些开发者和日常用户最常用的 Cask 应用:
| 分类 | Cask 名称 | 说明 |
|---|---|---|
| 浏览器 | google-chrome, firefox, brave-browser | 主流浏览器 |
| 编辑器/IDE | visual-studio-code, sublime-text, jetbrains-toolbox | 开发工具 |
| 终端 | iterm2, alacritty, warp | 终端模拟器 |
| 开发工具 | docker, postman, dbeaver-community | 容器、API、数据库 |
| 通讯 | slack, discord, telegram | 团队沟通 |
| 设计 | figma, sketch, gimp | UI/UX 和图像处理 |
| 实用工具 | alfred, raycast, maccy | 效率提升工具 |
| 系统工具 | bartender, monitorcontrol, coconutbattery | 系统增强 |
Cask 和 Mac App Store(MAS)是两种不同的应用获取方式,各有优劣:
| 维度 | Cask | Mac App Store |
|---|---|---|
| 应用来源 | 开发者官网直接下载 | Apple 审核后上架 |
| 自动更新 | 不管理(由应用自行处理) | 系统自动处理 |
| 沙箱限制 | 无(完整系统访问权限) | 有(Apple 沙箱限制) |
| 应用范围 | 广泛,不受 Apple 审核限制 | 有限制,需遵守 Apple 政策 |
| 批量部署 | 可通过 Brewfile 脚本化 | 可通过 mas CLI 工具管理 |
| 安装速度 | 直接下载 | 经过 Apple CDN |
在实际使用中,推荐优先使用 Cask 来安装应用,因为 Cask 提供的应用通常是最新版本且没有沙箱限制。对于只在 Mac App Store 上架的应用(如 Xcode、Keynote 等),可以配合 mas 命令行工具(可以通过 Homebrew 安装:brew install mas)来管理。
Cask 是 Homebrew 管理 GUI 应用的核心机制。通过 brew install --cask 可以一键安装数百种流行的 macOS 应用。Cask 不需要管理员权限,安装位置统一在 /Applications 目录。结合 mas 工具,可以覆盖几乎所有 macOS 应用的安装和管理需求。
Formula 是 Homebrew 的核心概念,它是一个用 Ruby 编写的包定义文件,描述了如何下载、编译和安装一个软件包。每个 Formula 文件对应一个软件包。
Formula 文件通常包含以下信息:
depends_on 列出的编译时和运行时依赖install 方法中定义的编译和安装指令test 方法中的安装验证代码一个典型的 Formula 文件(以 wget 为例的简化版本)结构如下:
Tap 是 Homebrew 的第三方仓库机制。Tap 扩展了 Homebrew 的软件来源,让你可以使用社区维护或其他组织维护的 Formula 与 Cask 仓库。Tap 的命名格式为 用户/仓库,实际对应 GitHub 上的 github.com/用户/homebrew-仓库 仓库。
| Tap 名称 | 用途 | 典型包 |
|---|---|---|
| homebrew/cask-versions | 提供同一应用的备选版本、旧版本、Beta 版本等 | firefox-developer-edition, google-chrome-canary, sublime-text3 |
| homebrew/cask-fonts | 提供字体一键安装 | font-fira-code, font-jetbrains-mono, font-hack-nerd-font |
| homebrew/cask-drivers | 提供硬件驱动的 Cask | logitech-options, sonos, elite-dangerous |
| homebrew/services | 管理后台服务的关键 Tap | nginx, mysql, postgresql, redis 的服务管理 |
| homebrew/command-not-found | 当输入未安装的命令时,提示对应的 Homebrew 包名 | 使用方法:添加 brew command-not-found-init 到 shell 配置 |
对于个人使用的内部工具或尚未被 Homebrew 收录的软件,你可以创建自己的 Formula:
编写 Formula 时,建议遵循以下原则:使用 std_configure_args 处理标准的 configure 参数;利用 resource 块处理多个下载源;在 test 方法中添加实际可运行的测试;使用 livecheck 配置版本检查策略。详细的 Formula 编写指南可以参考 Homebrew 官方文档的 Formula Cookbook。
Formula 是 Homebrew 的本质——每一个能用 brew install 安装的软件都有一个对应的 Formula 文件定义其行为。Tap 机制允许社区和组织维护独立的包仓库,极大地扩展了 Homebrew 的生态范围。熟悉 Formula 结构和 Tap 管理是成为高级 Homebrew 用户的必经之路。
brew services 是 Homebrew 管理后台服务的工具,基于 homebrew/services Tap。它利用系统的进程管理机制(macOS 上的 launchd 或 Linux 上的 systemd)来管理通过 Homebrew 安装的后台服务。
在 macOS 上,brew services 会生成并管理 ~/Library/LaunchAgents/ 下的 plist 文件(launchd 配置文件)。在 Linux 上,则生成 ~/.config/systemd/user/ 下的 systemd unit 文件。这意味着服务会以当前用户身份运行,不需要管理员权限。
以下是一些开发中最常用的后台服务及其管理方式:
brew pin 固定版本,防止意外升级brew services 提供了一种统一、便捷的方式来管理通过 Homebrew 安装的后台服务。它基于系统的原生服务管理机制(launchd/systemd),简化了服务配置文件的创建和管理。开发中最常用的服务是 PostgreSQL、Redis、Nginx 和 MySQL,掌握这些服务的管理是后端开发的必备技能。
随着使用时间的增长,Homebrew 会积累大量旧版本和缓存文件,占用可观的磁盘空间。以下是一套完整的清理策略:
可以在 shell 配置文件中设置 export HOMEBREW_NO_INSTALL_CLEANUP=1 来禁用安装后的自动清理,然后通过 crontab 或系统定期任务来执行集中的清理。或者保持默认设置(安装后自动清理),每 1-2 个月手动运行一次深度清理。
brew leaves 是一个非常有用的命令,它列出所有不被其他包依赖的"顶层"包。这些包是你主动安装的,而其他的包可能是作为依赖被自动拉入的。定期运行 brew leaves 可以帮助你了解系统上真正"需要"的包有哪些。
回滚功能(brew switch)只对 Homebrew Cellar 中缓存了旧版本的包有效。如果你之前运行过 brew cleanup,旧版本可能已被删除,此时无法回滚。因此,对于重要的软件(特别是数据库),建议在升级前先确认旧版本是否还保留在 Cellar 中。
Brewfile 是 Homebrew 的"配置即代码"方案,允许你用文本文件描述整个开发环境的软件依赖:
最佳实践:将 Brewfile 纳入版本控制管理(如同项目的 package.json 或 requirements.txt)。这能让团队成员用 brew bundle 一键搭建一致的开发环境,也能让你在不同 Mac 之间同步开发环境配置。
brew info 查看包的详细信息,确认来源可靠brew info 或 brew formula 查看包的 License,确保在商业环境中合规使用brew outdated 检查更新,关注安全公告HOMEBREW_NO_ANALYTICS=1 关闭匿名统计数据上报Homebrew 的长期维护需要关注磁盘空间管理(定期 cleanup 和 autoremove)、依赖分析(利用 deps、uses、leaves 命令)、版本管理(pin 和回滚)以及 Brewfile 的配置即代码实践。良好的维护习惯能避免许多常见的 Homebrew 问题。
Claude Code 是一个强大的 AI 编程助手,在开发流程中经常需要安装和管理开发工具。将 Homebrew 与 Claude Code 结合使用,可以实现从环境搭建到开发完成的完整自动化流程。
典型的使用场景包括:
核心优势:通过将 Homebrew 的 Brewfile 与 Claude Code 结合,你可以实现从零开始的完整开发环境一键搭建。Claude Code 负责分析项目需求、生成 Brewfile、执行安装命令,并在出现问题时进行排查和修复。这是一种真正意义上的"AI 配置环境"工作流。
在 Claude Code 中结合 Homebrew 使用可以显著提升开发环境搭建的效率。通过 Brewfile 实现"配置即代码",让 Claude Code 能够自动完成从依赖分析到安装配置的完整流程。这对多项目切换、团队新人入职、CI/CD 环境搭建等场景尤其有价值。
/usr/local 或 /opt/homebrew,卸载不留痕迹/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"/opt/homebrew,Intel Mac 安装到 /usr/localbrew doctor 是健康检查命令,建议定期运行| 命令 | 用途 |
|---|---|
| brew install <包> | 安装软件包 |
| brew uninstall <包> | 卸载软件包 |
| brew update | 更新 Homebrew 自身 |
| brew upgrade | 升级所有已安装的包 |
| brew list | 列出已安装的包 |
| brew search | 搜索软件包 |
| brew info | 查看包详细信息 |
| brew cleanup | 清理旧版本 |
| brew autoremove | 移除未使用的依赖 |
| brew deps | 查看依赖关系 |
brew install --cask <应用名> 安装 GUI 应用用户/仓库,对应 GitHub 的 homebrew-仓库brew services 统一管理后台服务(基于 launchd / systemd)start、stop、restart、list、infobrew pin 进行版本锁定brew cleanup 和 brew autoremove 释放磁盘空间brew leaves 识别"顶层"包brew doctorHOMEBREW_NO_AUTO_UPDATE 可以控制自动更新行为