Homebrew - macOS 与 Linux 的包管理器
The Missing Package Manager for macOS (or Linux)
目录
概述
Homebrew 是 macOS(及 Linux)上免费开源的包管理系统,用于简化 Apple(或 Linux 发行版)默认未包含的软件安装。它完全基于 Git 和 Ruby 构建,允许用户轻松创建、修改和回滚包定义。
核心特点
| 特性 | 说明 |
|---|---|
| 简洁安装 | 一行命令完成安装 |
| 隔离安装 | 包安装到独立目录(Cellar),通过符号链接整合 |
| 易于定制 | 基于 Git 的包定义,可轻松编辑和回滚 |
| 预编译二进制 | Bottles 提供预编译包,加速安装 |
| 跨平台支持 | macOS(Intel/Apple Silicon)和 Linux |
| GUI 应用支持 | Homebrew Cask 支持安装 macOS 应用程序 |
设计哲学
Homebrew 的核心设计理念:
"Install the stuff you need that Apple (or your Linux system) didn't."
关键原则
-
简洁可定制 - "It's all Git and Ruby underneath, so hack away with the knowledge that you can easily revert your modifications and merge upstream updates"
-
隔离与便携 - 包安装到独立 Cellar 目录,符号链接到统一前缀,保持系统整洁,安装可移植
-
互补而非替代 - 与系统现有工具(gem、pip 等)协同工作
-
开源友好 - 明确欢迎"从未参与过开源贡献的人"
安装指南
一行安装命令
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
参数说明:
-f-- 服务器错误时静默失败-s-- 静默模式(无进度条)-S-- 失败时显示错误-L-- 跟随重定向
支持平台
| 平台 | 支持状态 | 默认安装路径 |
|---|---|---|
| macOS (Intel) | 完全支持 | /usr/local |
| macOS (Apple Silicon M1/M2/M3/M4) | 完全支持(原生) | /opt/homebrew |
| Linux (x86_64) | 完全支持(Linuxbrew) | /home/linuxbrew/.linuxbrew |
| Windows | 不直接支持 | 使用 WSL2 |
系统要求
macOS:
- 64 位 Intel CPU 或 Apple Silicon
- macOS Monterey (12) 或更高版本
- Command Line Tools (CLT) for Xcode 或 Xcode
- Bourne-compatible shell(bash, zsh 等)
Linux:
- 64 位 x86_64 或 ARM64 处理器
- GCC 或 Clang 编译器
- 开发工具(build-essential / Development Tools)
- glibc, Git, curl
前置依赖安装
macOS - 安装命令行工具:
bash
xcode-select --install
Linux (Debian/Ubuntu):
bash
sudo apt-get update
sudo apt-get install build-essential curl git
Linux (Fedora/RHEL/CentOS):
bash
sudo dnf groupinstall "Development Tools"
sudo dnf install curl git
安装后配置
Apple Silicon Macs (M1/M2/M3/M4) - 添加到 PATH:
bash
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
Intel Macs:
bash
echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/usr/local/bin/brew shellenv)"
Linux:
bash
test -d /home/linuxbrew/.linuxbrew && eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
验证安装
bash
brew --version
brew doctor
卸载命令
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
基本命令
包安装与移除
| 命令 | 说明 |
|---|---|
brew install <formula> |
安装包 |
brew install --cask <cask> |
安装 macOS GUI 应用 |
brew reinstall <formula> |
卸载并重新安装 |
brew uninstall <formula> |
移除包 |
brew uninstall --cask <cask> |
移除 macOS 应用 |
brew uninstall --ignore-dependencies <formula> |
强制移除,忽略依赖 |
更新与升级
| 命令 | 说明 |
|---|---|
brew update |
更新 Homebrew 本身和所有 Tap |
brew upgrade |
升级所有已安装包 |
brew upgrade <formula> |
升级特定包 |
brew upgrade --cask |
升级所有已安装 Cask |
brew pin <formula> |
阻止包被升级 |
brew unpin <formula> |
允许包被升级 |
brew outdated |
列出有可用更新的包 |
搜索与信息
| 命令 | 说明 |
|---|---|
brew search <text> |
搜索可用包 |
brew search /regex/ |
使用正则表达式搜索 |
brew info <formula> |
显示包详细信息 |
brew info --cask <cask> |
显示 Cask 信息 |
brew list |
列出所有已安装包 |
brew list --formula |
仅列出已安装 Formula |
brew list --cask |
仅列出已安装 Cask |
brew deps <formula> |
显示包依赖 |
brew deps --tree <formula> |
以树形显示依赖 |
brew uses --installed <formula> |
显示使用某包的其他包 |
brew home <formula> |
在浏览器打开包主页 |
brew cat <formula> |
显示 Formula 文件内容 |
brew edit <formula> |
编辑 Formula 文件 |
清理与维护
| 命令 | 说明 |
|---|---|
brew cleanup |
移除旧版本包 |
brew cleanup <formula> |
清理特定包 |
brew cleanup -n |
干运行 - 显示将被清理的内容 |
brew cleanup --prune=all |
移除所有缓存下载 |
brew doctor |
检查常见问题 |
brew config |
显示 Homebrew 配置 |
brew --cache |
显示缓存目录位置 |
brew --prefix |
显示 Homebrew 安装路径 |
Tap(第三方仓库)
| 命令 | 说明 |
|---|---|
brew tap |
列出所有 Tap |
brew tap <repo> |
添加第三方仓库 |
brew untap <repo> |
移除 Tap |
brew tap-info <repo> |
显示 Tap 信息 |
服务管理
| 命令 | 说明 |
|---|---|
brew services list |
列出所有运行服务 |
brew services start <formula> |
启动服务 |
brew services stop <formula> |
停止服务 |
brew services restart <formula> |
重启服务 |
brew services run <formula> |
运行服务(不自动启动) |
架构原理
核心组件
| 组件 | 说明 |
|---|---|
| Tap | 包含 Formula 文件的 Git 仓库(如 homebrew/core, homebrew/cask) |
| Formula | 定义包的 Ruby 类;每个 .rb 文件对应一个包 |
| Cellar | 所有包安装的目录(/usr/local/Cellar 或 /opt/homebrew/Cellar) |
| Keg | Cellar 中已安装的 Formula 版本 |
| Bottle | 预编译二进制,加速安装 |
| Prefix | 安装根目录(Intel: /usr/local,Apple Silicon: /opt/homebrew) |
Formula 结构
Formula 是继承自 Formula 基类的 Ruby 类:
ruby
class Wget < Formula
desc "Internet file retriever"
homepage "https://www.gnu.org/software/wget/"
url "https://ftp.gnu.org/gnu/wget/wget-1.24.5.tar.gz"
sha256 "fa2dc35bab5184ecbc46a9ef83def2aaaa3f4c9f3c97d4bd19dcb07d4da637de"
license "GPL-3.0-or-later"
def install
system "./configure", "--prefix=#{prefix}"
system "make", "install"
end
end
仓库结构
Homebrew/brew/
├── Library/
│ ├── Homebrew/
│ │ ├── formula.rb # Formula 基类
│ │ ├── formula_installer.rb
│ │ ├── tap.rb # Tap 管理
│ │ ├── dependency.rb
│ │ ├── bottle.rb
│ │ ├── keg.rb
│ │ └── ...
│ └── Taps/ # 符号链接的 Tap 目录
├── bin/
│ └── brew # 主可执行文件(Ruby)
├── completions/
├── docs/
└── manpages/
依赖解析
Homebrew 使用 有向无环图(DAG) 进行依赖解析:
- 拓扑排序确定安装顺序
- 递归解析构建完整依赖树
- 构建依赖 (
:build)仅在编译时需要 - 运行依赖链接到前缀目录
ruby
# 依赖类型
depends_on "openssl" # 运行依赖
depends_on "cmake" => :build # 仅构建依赖
depends_on "python@3.11" => :recommended # 推荐(默认启用)
depends_on "gui" => :optional # 可选
Tap 系统
# 官方 Tap
homebrew/core # 核心 Formula(默认)
homebrew/cask # macOS 应用
homebrew/bundle # Bundler 式管理
homebrew/services # 服务管理
# 第三方 Tap
user/repo → brew tap user/repo → 从 github.com/user/homebrew-repo 安装
高级功能
第三方 Tap
Tap 是扩展 Homebrew 的外部 Git 仓库:
bash
# 添加第三方 Tap
brew tap user/repo
# 列出所有 Tap
brew tap
# 移除 Tap
brew untap user/repo
# 创建新 Tap
brew tap-new your-username/your-tap
自定义 Tap 仓库结构:
homebrew-mytools/
├── Formula/
│ ├── my-tool.rb
│ └── another-tool.rb
├── Casks/
│ └── my-app.rb
└── README.md
Homebrew-Cask
Homebrew Cask 用于管理 macOS GUI 应用:
bash
# 安装 GUI 应用
brew install --cask google-chrome
brew install --cask visual-studio-code
brew install --cask docker
# 搜索 Cask
brew search --cask firefox
# 列出已安装 Cask
brew list --cask
# 升级 Cask
brew upgrade --cask google-chrome
自定义 Cask 示例:
ruby
cask "my-app" do
version "1.2.3"
sha256 "2a14fa6e4873c7c55e1c2a3b4c5d6e7f..."
url "https://example.com/downloads/my-app-#{version}.dmg"
name "My Application"
desc "Description of my application"
homepage "https://example.com/my-app"
app "MyApp.app"
zap trash: [
"~/Library/Application Support/MyApp",
"~/Library/Preferences/com.example.myapp.plist",
]
end
创建自定义 Formula
完整 Formula 示例:
ruby
class MyTool < Formula
desc "A custom command-line tool"
homepage "https://example.com/my-tool"
url "https://example.com/downloads/my-tool-1.0.0.tar.gz"
sha256 "abc123def456..."
license "MIT"
# 构建依赖
depends_on "cmake" => :build
depends_on "pkg-config" => :build
# 运行依赖
depends_on "openssl"
depends_on "sqlite"
# 可选依赖
depends_on "python" => :optional
# 平台特定依赖
on_macos do
depends_on "readline"
end
on_linux do
depends_on "libffi"
end
# 冲突声明
conflicts_with "other-tool", because: "both install the same binary"
def install
system "cmake", "-S", ".", "-B", "build",
"-DCMAKE_INSTALL_PREFIX=#{prefix}"
system "cmake", "--build", "build"
system "cmake", "--install", "build"
bin.install "my-tool"
man1.install "docs/my-tool.1"
bash_completion.install "completions/my-tool.bash"
zsh_completion.install "completions/_my-tool"
end
def caveats
<<~EOS
To configure my-tool, run:
my-tool --init-config
EOS
end
test do
assert_match "version 1.0.0", shell_output("#{bin}/my-tool --version")
end
end
服务管理
brew services 管理后台守护进程:
bash
# 列出服务状态
brew services list
# 启动服务(并注册自动启动)
brew services start postgresql
brew services start mysql
brew services start redis
# 停止服务
brew services stop postgresql
# 重启服务
brew services restart postgresql
# 运行但不自动启动
brew services run postgresql
# 启动所有服务
brew services start --all
服务状态指示:
| 状态 | 含义 |
|---|---|
started |
服务正在运行 |
stopped |
服务未运行 |
error |
服务启动失败 |
none |
服务从未启动 |
yellow |
服务正在启动 |
Brewfile 声明式管理
使用 Brewfile 实现可复现配置:
bash
# 导出当前配置到 Brewfile
brew bundle dump --file=~/Brewfile
# 从 Brewfile 安装
brew bundle install --file=~/Brewfile
Brewfile 示例:
ruby
tap "homebrew/core"
tap "homebrew/cask"
brew "git"
brew "node"
brew "python@3.11"
brew "postgresql@14"
brew "redis"
cask "visual-studio-code"
cask "docker"
cask "google-chrome"
service "postgresql@14"
service "redis"
常用场景示例
开发环境配置
bash
# 安装开发工具
brew install git node python@3.11 go rust
# 安装编辑器
brew install --cask visual-studio-code
# 安装数据库
brew install postgresql@14 redis
brew services start postgresql@14
brew services start redis
# 创建可复现配置
brew bundle dump --file=~/Brewfile
搜索和安装包
bash
# 搜索可用包
brew search postgresql
brew search /python/
# 查看包信息
brew info node
# 查看依赖树
brew deps --tree wget
# 安装特定版本
brew install python@3.11
系统维护
bash
# 检查问题
brew doctor
# 更新 Homebrew
brew update
# 升级所有包
brew upgrade
# 清理旧版本
brew cleanup
# 查看配置
brew config
创建和贡献 Formula
bash
# 从 URL 创建 Formula
brew create https://foo.com/foo-1.0.tgz
# 编辑 Formula
brew edit wget
# 本地测试安装
brew install --build-from-source my-tool
# 严格检查
brew audit --strict my-tool
# 提交到 homebrew-core(通过 PR)
资源链接
官方资源
| 资源 | 链接 |
|---|---|
| 官方网站 | brew.sh |
| GitHub 仓库 | github.com/Homebrew/brew |
| 官方文档 | docs.brew.sh |
| Formula 搜索 | formulae.brew.sh |
| Ruby API 文档 | rubydoc.brew.sh |
核心文档
| 文档 | 链接 |
|---|---|
| 安装指南 | docs.brew.sh/Installation |
| 命令手册 | docs.brew.sh/Manpage |
| Formula Cookbook | docs.brew.sh/Formula-Cookbook |
| Tap 文档 | docs.brew.sh/Taps |
| FAQ | docs.brew.sh/FAQ |
| Linux 支持 | docs.brew.sh/Homebrew-on-Linux |
GitHub 仓库
| 仓库 | 链接 |
|---|---|
| Homebrew/brew | github.com/Homebrew/brew |
| homebrew-core | github.com/Homebrew/homebrew-core |
| homebrew-cask | github.com/Homebrew/homebrew-cask |
| homebrew-services | github.com/Homebrew/homebrew-services |