Homebrew 常用命令怎么理解:formula、cask、tap、services 和 cleanup

1次阅读
没有评论

Mac 上装开发工具,很多人第一反应就是 Homebrew。但刚开始用时,容易把几件事混在一起:brew install 是装什么,formulacask 有什么区别,tap 是不是源,brew services 为什么能让 Redis 开机启动,brew cleanup 又会清什么。

这些词理解清楚以后,Homebrew 就不只是“复制一条命令安装软件”,而是能变成一套可维护的本机开发环境管理方式。

这篇整理最常用的一组命令和排障思路,只保留公开、安全、长期可复用的部分。

先用官方安装命令

Homebrew 的安装命令可能会随时间调整,所以不要长期照抄旧教程里的 ruby -e 写法。当前优先看官网首页给出的安装命令:

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

安装脚本会先说明它要做什么,再暂停等待确认。安装完成后,按终端提示把 brew shellenv 写入当前 shell 配置,确保 brewPATH 里。

Apple Silicon Mac 通常在:

/opt/homebrew

Intel Mac 常见在:

/usr/local

不确定时直接查:

brew --prefix
brew --cellar
brew --caskroom

不要在脚本里写死 /usr/local。迁移到 Apple Silicon 以后,这类硬编码路径最容易出问题。

formula 和 cask 分别装什么

Homebrew 里最常见的两类包是 formulacask

可以先这样理解:

| 类型 | 适合安装 | 例子 |

| — | — | — |

| formula | 命令行工具、库、服务 | gitredisffmpeg |

| cask | 图形化应用、字体、插件 | firefoxvisual-studio-code、字体包 |

命令行工具通常直接:

brew install wget
brew install redis

图形化应用通常:

brew install --cask firefox
brew install --cask visual-studio-code

如果不确定包名,先搜索:

brew search redis
brew search --cask firefox

再看详细信息:

brew info redis
brew info --cask firefox

brew info 很有用,它会告诉你版本、依赖、安装路径、服务启动提示和注意事项。

tap 是额外的软件仓库

tap 可以理解成额外的软件仓库。官方维护的核心仓库之外,其他人也可以维护自己的 formula 或 cask。

查看当前 tap:

brew tap

添加一个 tap:

brew tap owner/repo

移除一个 tap:

brew untap owner/repo

排障时如果遇到某个 tap 拉取失败、仓库改名、GitHub 用户名变了,可以先 brew tap 看当前列表,再按提示 brew untap 掉异常 tap,然后重新 brew update

这里要谨慎一点:tap 本质上会让你从第三方仓库安装软件。非官方 tap 最好先看项目来源、维护状态和安装脚本,不要看见命令就直接粘贴。

update、outdated、upgrade、cleanup 是一组

日常升级可以按这条线走:

brew update
brew outdated
brew upgrade
brew cleanup

它们分别做不同事情:

  • brew update:更新 Homebrew 自身和软件索引。
  • brew outdated:列出已经安装、但有新版本的软件。
  • brew upgrade:升级可升级的软件。
  • brew cleanup:清理旧版本和缓存。

如果只想看某个包:

brew outdated redis
brew upgrade redis

如果升级后某个工具异常,可以先看:

brew info redis
brew doctor

brew doctor 会检查潜在问题。它的输出有时很多,不代表系统一定坏了;如果当前工具都能正常用,可以先关注和当前问题直接相关的 warning。

brew services 管后台服务

像 Redis、PostgreSQL、RabbitMQ 这类本地服务,可以手动运行,也可以交给 brew services 管。

启动并注册为登录后自动运行:

brew services start redis

停止并取消自动运行:

brew services stop redis

重启:

brew services restart redis

查看状态:

brew services list
brew services info redis

临时运行、不注册开机或登录启动,可以用:

brew services run redis

这个区别很重要:start 会注册服务,run 更像临时启动。只是临时调试时,不一定要把服务长期挂起来。

如果服务状态乱了,可以先停止再启动:

brew services stop redis
brew services start redis

还有一个清理命令:

brew services cleanup

它用于移除不用的服务配置。执行前最好先看当前 brew services list,确认没有误会。

常用查询命令放一起

这些命令适合日常查环境:

brew --version
brew config
brew doctor
brew list
brew list --cask
brew info <name>
brew deps <name>
brew uses <name>

含义大致是:

  • brew config:看 Homebrew、Ruby、系统、CPU 架构等信息。
  • brew list:列出已安装 formula。
  • brew list --cask:列出已安装 cask。
  • brew deps:看一个包依赖谁。
  • brew uses:看哪些包依赖它。

排障时不要一上来重装。先看 brew infobrew configbrew doctor,通常能定位到路径、依赖或服务状态问题。

换源和代理不要混着乱改

Homebrew 慢,常见原因是网络访问 GitHub 或下载源不稳定。解决思路通常有两类:

  1. 配代理。
  2. 换镜像源。

这两类不要同时胡乱叠加。代理、镜像、环境变量、Git remote 一起改,短期可能能跑,后续排障会非常痛苦。

更稳的做法是:

  • 先确认当前 brew configbrew doctor
  • 再确认是 Git 拉取慢,还是 bottle 下载慢。
  • 只改一类变量,改完立刻验证。
  • 把改过的环境变量和 remote 记录下来,后续能恢复。

如果你只是临时网络不好,优先用可控的代理环境;如果是长期在固定网络环境里使用,再考虑换镜像。无论哪种方式,都不要把陌生脚本直接写进 shell 配置。

Brewfile 适合迁移机器

如果你经常换机器,或者想把本机开发环境记录下来,可以用 Homebrew Bundle。

导出当前环境:

brew bundle dump --file=Brewfile

在新机器安装:

brew bundle --file=Brewfile

Brewfile 可以描述 formula、cask、tap,甚至部分编辑器扩展。它比手写一堆安装命令更可维护。

但 Brewfile 也要定期清理。不要把一次性试用的软件、私有 tap、敏感工具或早就不用的应用全部带到新机器。

小结

Homebrew 日常可以先记住这几组:

  • 安装:brew installbrew install --cask
  • 查询:brew searchbrew infobrew list
  • 升级:brew updatebrew outdatedbrew upgrade
  • 清理:brew cleanup
  • 服务:brew services start/stop/restart/list
  • 排障:brew configbrew doctor
  • 迁移:brew bundle

真正关键的是理解边界:formula 管命令行工具和服务,cask 管应用,tap 是额外仓库,services 是后台服务管理,cleanup 是清理旧版本和缓存。这样后续装 Redis、RabbitMQ、ffmpeg、编辑器或迁移新 Mac,就不会只剩“复制命令试试看”。

参考链接

  • Homebrew 官网:<https://brew.sh/>
  • Homebrew 手册:<https://docs.brew.sh/Manpage>
  • Homebrew Taps:<https://docs.brew.sh/Taps>
正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-06-11发表,共计3363字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)