介绍
Homebrew(下文简称 brew)是 macOS 上事实标准的包管理器,后来也支持了 Linux。它的定位类似 Debian 的 apt、CentOS 的 yum:一条命令完成软件的安装、升级和卸载,依赖关系自动处理,不用再到处找安装包、手动拖应用。
brew 管的东西分两类,先把这个概念弄清楚,后面的命令都围绕它展开:
- Formula:命令行工具和库,来自 homebrew-core 仓库,比如
wget、node、redis。 - Cask:macOS 的图形界面应用,比如 Chrome、VS Code。早期由 Homebrew Cask 这个扩展提供,后来并入了 brew 本体,现在不需要单独安装。对这类应用,brew 等于把“下载 dmg → 拖进 Applications → 手动清缓存”这套流程变成了命令行操作。
安装
官方安装命令:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
国内网络直连 GitHub 经常超时,推荐用镜像脚本安装,脚本会让你选镜像源(中科大、清华等),并自动把 git remote 和下载源都换掉:
# 安装
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
# 卸载
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/HomebrewUninstall.sh)"
装完值得确认一件事:brew 装在哪个目录。Apple Silicon 机器是 /opt/homebrew,Intel 机器是 /usr/local,用 brew --prefix 一查便知。网上不少教程默认 /usr/local,照抄后在 M 系列芯片上跑不通,多半就是这个原因。
常用命令
查找与安装
# 搜索软件(formula 和 cask 一起搜)
brew search wget
# 查看软件详情:版本、依赖、官网
brew info wget
# 安装
brew install wget
# 装坏了重装
brew reinstall wget
升级
update 和 upgrade 是两个动作,容易混:
# 更新 brew 自己和软件目录(有哪些软件、最新版本是多少),不升级已装软件
brew update
# 列出有新版本的软件
brew outdated
# 升级指定软件;不带参数则升级全部
brew upgrade wget
# 锁定某个软件,不让 upgrade 动它
brew pin wget
brew unpin wget
卸载与清理
注意 cleanup 不是卸载,它清的是旧版本文件和下载缓存:
# 卸载软件
brew uninstall wget
# 清理指定软件的旧版本和缓存
brew cleanup wget
# 全量清理,顺带删掉所有不再被任何软件依赖的包
brew cleanup
brew autoremove
查看与体检
# 已安装列表,formula 和 cask 分开列
brew list --formula
brew list --cask
# 只看你主动安装的软件(不含作为依赖装进来的),清理前排查很有用
brew leaves
# 某个软件装了哪些文件、装在哪
brew list wget
# 环境体检,装不上、升级失败时先跑这个
brew doctor
# 查看配置:版本、安装路径、镜像源等
brew config
服务管理:brew services
装 MySQL、Redis、Nginx 这类需要长期跑后台的服务时,用 brew services 管理,体验接近 Linux 的 systemctl。底层是 macOS 的 launchd:不带 sudo 时注册为当前用户的 LaunchAgent(登录后自启),加 sudo 则注册为系统级 LaunchDaemon(开机自启,服务跑在 root 下)。
# 查看服务列表和状态(status 列:started / stopped / error / unknown)
brew services list
# 启动并注册(登录自启)
brew services start redis
# 停止并取消注册
brew services stop redis
# 重启并注册
brew services restart redis
# 只启动一次,不注册自启,临时调试用
brew services run redis
# 立即停止服务,但保留注册(下次登录还会启动)
brew services kill redis
# 查看某个服务的运行状态和日志路径,服务起不来先看这里
brew services info redis
# 清掉已卸载软件残留的服务配置
brew services cleanup
以上命令都支持 --all 一次操作所有服务,比如 brew services restart --all。
一个经典报错
如果执行 brew services 报下面的错:

Error: uninitialized constant Homebrew::Service
/opt/homebrew/Library/Taps/homebrew/homebrew-services/cmd/services.rb:113:in `services'
不是 brew 坏了,而是磁盘上残留了老版本的 homebrew/services tap。早期 brew services 靠这个 tap 提供,从 brew 2.1.16(2019 年)起已内置进 brew 本体;残留的旧脚本会覆盖内置命令,和新版 brew 不兼容。把残留删掉即可,不要再按老教程 brew tap homebrew/services 装回来:
rm -rf "$(brew --repository)/Library/Taps/homebrew/homebrew-services"
# 或者
brew untap homebrew/services
删完 brew services 会自动走内置实现,不需要重启终端。
安装 GUI 应用:Cask
install、uninstall、search、upgrade 这些命令对 cask 同样适用,这里只记几个特有的写法和坑。注意早期的 brew cask install xxx 写法已废弃,统一用 --cask 参数:
# 安装 GUI 应用
brew install --cask google-chrome
# 搜索应用(直接 brew search 也行,结果里 cask 会单独列出)
brew search --cask chrome
# 列出已装的 GUI 应用
brew list --cask
# 升级
brew upgrade --cask google-chrome
两个容易踩的坑:
- 卸载残留。
brew uninstall --cask xxx只删应用本体,偏好设置、缓存都还留在~/Library下,想删干净加--zap:
brew uninstall --cask --zap google-chrome
- upgrade 升不动自带更新功能的应用。像 VS Code、Chrome 这类自己会弹更新框的应用,cask 定义里标了
auto_updates: true,brew upgrade --cask默认会跳过它们,要强制纳入升级范围需加--greedy:
brew upgrade --cask --greedy

评论 0
可以先写评论,登录后草稿会自动恢复。