Homebrew - macOS 与 Linux 的包管理器

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."

关键原则

  1. 简洁可定制 - "It's all Git and Ruby underneath, so hack away with the knowledge that you can easily revert your modifications and merge upstream updates"

  2. 隔离与便携 - 包安装到独立 Cellar 目录,符号链接到统一前缀,保持系统整洁,安装可移植

  3. 互补而非替代 - 与系统现有工具(gem、pip 等)协同工作

  4. 开源友好 - 明确欢迎"从未参与过开源贡献的人"


安装指南

一行安装命令

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
相关推荐
木心术12 小时前
DevOps全流程实践:从CI/CD到自动化测试的最佳实践
运维·ci/cd·devops
开开心心_Every2 小时前
文件强制删除工具,单文件拖入解锁删除简单
运维·edge·pdf·计算机外设·逻辑回归·散列表·启发式算法
代码论斤卖2 小时前
OpenHarmony的watchdog service频繁崩溃问题分析
linux·harmonyos
halazi1002 小时前
WSL 安装与 Ubuntu 24.04 配置使用指南
linux·运维·ubuntu·wsl
MDIOT旗舰2 小时前
4G低功耗边缘计算网关:让智能抄表与远程运维从未如此简单
运维·人工智能·边缘计算·modbus·红外抄表·plc智能网关
2302_803132252 小时前
ensp中关于交换机S3700不被识别的错误列举以及vlan 绑定acl后无法删除问题
运维·服务器·网络
拾贰_C2 小时前
【Ubuntu | Nvidia | driver | installation | commend】
linux·运维·ubuntu
.柒宇.2 小时前
Linux 时间同步服务:Chrony 深度笔记
linux·运维·服务器
赴前尘2 小时前
S3 命令行工具 Docker 容器运行
运维·docker·容器