1. 从“装不上”到“离不开”为什么你需要Homebrew如果你在Mac上折腾过开发环境或者只是想装个比App Store里版本更新的命令行工具大概率遇到过这种场景打开终端输入一串从某个教程里抄来的命令结果提示“command not found”。然后你开始搜索“如何在Mac上安装Python/Node.js/ffmpeg”跳出来的教程五花八门有的让你去官网下载pkg安装包有的让你用MacPorts还有的甚至让你自己编译。一通操作下来不仅可能把系统环境搞得乱七八糟下次更新或者卸载的时候更是无从下手。这就是Homebrew要解决的问题。你可以把它理解为Mac以及Linux上的“App Store for Developers”但它更纯粹、更强大。它的核心价值就一句话用一条命令安装、更新、卸载你开发所需的一切。从编程语言Python, Ruby, Node.js、数据库PostgreSQL, Redis、到实用工具wget, tree, htop甚至是图形化软件比如Chrome、Visual Studio Code的CLI安装方式Homebrew都能帮你搞定。它自动处理依赖关系把所有软件都安装在一个独立的目录通常是/opt/homebrew或之前的/usr/local不会污染你的系统文件卸载时也能清理得干干净净。我刚开始用Mac时也嫌配置Homebrew麻烦直到有一次为了配置一个包含七八个依赖的项目手动安装、解决库冲突花了整整一个下午。而用Homebrew一行brew install命令加上等待时间十分钟就搭好了。从此我便“离不开”它了。这篇内容就是把我这些年从新手到重度用户积累的经验包括那些官方文档不会细说的“坑”和技巧整理成一份真正面向实战的“保姆级”指南。无论你是刚接触终端的新手还是想更高效管理工具的老手都能在这里找到答案。2. 基石搭建Homebrew的安装与基础配置详解安装Homebrew本身是你要过的第一关。这个过程看似简单但网络环境、系统权限、Shell配置这些细节任何一个出问题都会导致安装失败或后续使用异常。我们一步步来把地基打牢。2.1 官方一键安装理解脚本背后的操作Homebrew的官方安装命令非常简洁/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)这条命令几乎出现在所有教程里但你知道它具体做了什么吗理解它能在出问题时自己排查。curl -fsSL这是curl命令的几个参数组合。-f(--fail)让HTTP错误在服务器端静默失败不输出HTML错误页面。-s(--silent)静默模式不显示进度条或错误信息。-S(--show-error)与-s配合在失败时显示错误信息。-L(--location)如果服务器报告请求的页面已移动则让curl自动重定向到新位置。 合起来它的作用是“安静地、可靠地获取一个可能发生重定向的URL内容失败时给出提示”。https://raw.githubusercontent.com/.../install.sh这是Homebrew安装脚本的官方地址。脚本内容托管在GitHub上。/bin/bash -c ...获取到脚本内容后直接传递给bash解释器执行。当你回车执行后脚本会做以下几件关键事检查系统确认你使用的是macOS或Linux并检查是否已安装Xcode Command Line Tools这是很多编译工具的基础。选择安装路径对于使用Apple SiliconM1/M2/M3系列芯片的Mac默认安装到/opt/homebrew。对于使用Intel芯片的Mac默认安装到/usr/local/homebrew。 这个隔离设计是为了避免与系统自带的工具冲突。创建目录并设置权限它会以你的用户权限创建Homebrew的根目录及其子目录如Cellar,Casks等并将所有权赋予你这样你以后使用brew命令就不需要每次都加sudo。克隆核心仓库从GitHub克隆Homebrew的核心代码库Homebrew/brew到安装目录。配置Shell环境在脚本执行的最后它会提示你需要在你的Shell配置文件如~/.zshrc或~/.bash_profile中添加几行关于PATH环境变量的配置。这是至关重要的一步也是很多新手安装后brew命令依然找不到的原因。注意如果你的网络访问GitHub不稳定可能会在curl下载脚本或git克隆仓库时卡住或失败。这是安装过程中最常见的问题。如果遇到可以尝试使用国内镜像源进行安装但需注意镜像的时效性和安全性。2.2 安装后的关键一步配置Shell环境变量安装脚本成功运行后你大概率会看到类似这样的提示 Next steps: - Run these two commands in your terminal to add Homebrew to your PATH: echo eval $(/opt/homebrew/bin/brew shellenv) ~/.zshrc eval $(/opt/homebrew/bin/brew shellenv)对于Intel Mac路径可能是/usr/local/bin/brew。这两行命令是干什么的echo eval $(/opt/homebrew/bin/brew shellenv) ~/.zshrc这行命令将一段eval语句追加写入到你的~/.zshrc文件末尾。~/.zshrc是Zsh shellmacOS Catalina及以后版本的默认Shell的配置文件每次启动新的终端窗口时都会加载它。brew shellenv这个子命令会输出一系列用于设置环境变量的Shell命令最主要的就是将Homebrew的bin目录存放所有可执行文件添加到PATH环境变量的最前面。eval命令则执行这段输出。通过写入配置文件实现了永久生效。eval $(/opt/homebrew/bin/brew shellenv)这行命令是立即在当前终端会话中执行上述环境变量设置让你无需关闭再打开终端立刻就能使用brew命令。你必须执行这两步我见过不少朋友安装完直接关闭终端下次打开输入brew发现“命令未找到”就是因为PATH没有配置。执行完后可以通过source ~/.zshrc或新开一个终端窗口来验证。输入brew --version如果显示版本号恭喜你安装成功。2.3 基础配置与镜像加速可选但推荐Homebrew默认从GitHub下载软件包的公式Formula和预编译的二进制包Bottle。对于国内用户这可能会非常慢。我们可以将其替换为国内镜像源以加速。更换Homebrew核心仓库brew.git源# 查看当前源 git -C $(brew --repo) remote -v # 通常显示 origin https://github.com/Homebrew/brew # 替换为清华大学镜像源 git -C $(brew --repo) remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git # 或者中科大镜像源 # git -C $(brew --repo) remote set-url origin https://mirrors.ustc.edu.cn/brew.git更换Homebrew核心软件包仓库homebrew-core.git源git -C $(brew --repo homebrew/core) remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git # 中科大https://mirrors.ustc.edu.cn/homebrew-core.git更换Homebrew Cask仓库可选用于安装macOS应用git -C $(brew --repo homebrew/cask) remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git # 中科大https://mirrors.ustc.edu.cn/homebrew-cask.git更换Bottle镜像源二进制包下载地址Bottle是预编译好的二进制包下载它比从源码编译快得多。需要修改环境变量。 对于Zsh将以下内容添加到~/.zshrc中放在brew环境变量配置之后即可# 清华大学 bottle 镜像 export HOMEBREW_BOTTLE_DOMAINhttps://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles # 中科大https://mirrors.ustc.edu.cn/homebrew-bottles然后执行source ~/.zshrc使其生效。完成以上配置后可以运行brew update来测试更新速度。如果遇到镜像同步延迟导致某个软件包找不到可以临时使用HOMEBREW_NO_INSTALL_FROM_API1 brew install formula尝试从源码编译安装或者切换回官方源。3. 核心武器库brew install, search, info 深度解析安装配置妥当后我们就进入了日常使用阶段。brew install是你最常用的命令但围绕它的一系列相关命令能让你从“能用”进阶到“高效用”。3.1 如何找到你想装的软件brew search 的智慧当你不知道某个软件在Homebrew里叫什么名字时brew search是你的第一道火线。# 基础搜索 brew search python这会列出所有名称或描述中包含“python”的“公式”Formula即软件包。结果可能包括python3.11,python3.12,ipython,micropython等等。但直接搜索可能会返回太多结果。这里有两个高级技巧使用正则表达式进行精确搜索brew search /^python3\.1[12]$/这只会匹配名称严格以python3.11或python3.12开头的公式过滤掉其他无关项。搜索Cask图形化应用 Homebrew Cask是Homebrew的一个扩展用于安装和管理macOS的图形应用程序.dmg/.pkg。# 搜索Cask brew search --cask visual studio code # 或者简写 brew search --cask vscode你会发现一个叫visual-studio-code的cask。注意cask的名称通常带有连字符且与App Store内的名称可能不同。3.2 安装之前必看brew info 提供的决策信息找到正确的名字后别急着安装。先用brew info formula查看详细信息这个习惯能帮你避开很多坑。brew info node你会看到一个非常详细的信息面板通常包含描述这个软件是干什么的。主页官方项目地址。当前稳定版本例如22.1.0。许可证例如MIT。安装情况Not installed或Installed。如果已安装会显示安装路径。依赖项 (Dependencies)安装这个软件前Homebrew会自动先安装哪些其他软件。例如Node.js可能依赖python3.12和c-ares等。冲突项 (Conflicts with)与哪些已安装的软件冲突。这是关键信息比如你系统已有旧版Python安装新版本时可能需要特别注意。Caveats重要说明这是brew info里最有价值的部分安装完成后你必须注意的后续配置步骤。例如安装PostgreSQL后它会告诉你如何启动服务、如何初始化数据库、配置文件在哪。我强烈建议在安装任何软件后回头仔细阅读这里的Caveats。3.3 安装的艺术brew install 的各种姿势与选项掌握了信息现在可以安装了。# 最基础的安装 brew install node # 安装指定版本如果公式支持多版本 brew install python3.11 # 安装Cask应用 brew install --cask google-chrome安装过程你会看到Homebrew自动解析依赖、下载bottle或源码、执行安装步骤。如果下载的是bottle速度会很快如果是源码编译常见于最新版本或特定配置则需要耐心等待。几个实用的安装选项--build-from-source强制从源码编译即使有bottle可用。通常用于调试或需要特定编译选项时。--force-bottle强制使用bottle安装即使有更新的源码。在网速慢或想避免编译时使用。--HEAD安装该软件开发仓库的最新提交版本即“前沿”版本不稳定但可能有新特性。例如brew install --HEAD neovim。一个真实案例安装带特定功能的软件比如我想安装一个支持所有视频格式的ffmpeg。默认的ffmpeg公式可能只包含常用编码器。我可以先查看它有哪些编译选项brew info ffmpeg在输出中寻找“Options”部分你会看到一堆--with-xxx选项。然后我可以这样安装brew install ffmpeg --with-fdk-aac --with-libvpx --with-opus这样安装的ffmpeg就包含了这些额外的编码器库。不过需要注意的是随着Homebrew的发展很多--with-*选项已被移除转而推荐通过brew install额外的库让ffmpeg在编译时自动探测。所以具体选项需要以brew info的输出为准。4. 日常维护与高级管理更新、清理与服务控制软件不是安装完就一劳永逸的。更新、清理、管理后台服务是保持系统整洁和工具链健康的关键。4.1 更新策略brew update, upgrade, outdatedHomebrew的更新分为两层公式定义的更新和已安装软件的更新。更新公式库 (brew update) 这相当于刷新你的“软件商店”目录。它会从你配置的Git远程仓库如GitHub或镜像源拉取最新的软件包列表和版本信息。这是执行升级操作前推荐的第一步。brew update查看哪些软件可升级 (brew outdated) 执行brew update后你可以用这个命令查看所有已安装的、且有新版本的软件。brew outdated # 输出示例 # python3.11 (3.11.9) 3.11.10 # node (22.0.0) 22.1.0升级软件 (brew upgrade)# 升级所有可升级的软件 brew upgrade # 仅升级某个特定软件 brew upgrade node # 升级所有软件并清理旧版本 brew upgrade --greedy关于--greedy有些软件包分为stable稳定版和devel/head开发版版本。默认brew upgrade只升级稳定版。--greedy选项会忽略版本标签将所有可更新的包都升级到最新包括开发版慎用。4.2 空间回收大师brew cleanup 的学问Homebrew默认会保留所有已安装软件的所有旧版本。这在你需要回滚时有用但长期下来会占用大量磁盘空间尤其是Xcode或大型工具。brew cleanup就是用来清理的。# 查看如果执行清理会释放多少空间 brew cleanup -n # 或 --dry-run # 实际执行清理删除所有软件的所有旧版本 brew cleanup # 清理指定软件的旧版本 brew cleanup node # 更激进的清理删除所有超过120天的缓存文件下载的bottle、源码等 brew cleanup --prune120我个人的习惯是每月运行一次brew cleanup并在升级大量软件后运行。通过brew cleanup -n先预览是个好习惯。4.3 管理后台服务brew services 真香对于像数据库PostgreSQL/MySQL/Redis、Web服务器Nginx这类需要长期在后台运行的程序Homebrew Services提供了一个统一的管理界面比手动写启动脚本方便太多。# 列出所有使用brew安装的、支持服务管理的软件及其状态 brew services list # 启动一个服务并在登录时自启 brew services start postgresql # 停止一个服务并禁用登录自启 brew services stop postgresql # 重启一个服务 brew services restart redis # 查看某个服务的运行日志如果支持 brew services info nginx它的原理是利用macOS的launchctl启动代理来管理后台进程。用brew services管理服务配置文件会被妥善放置启动、停止、日志查看都标准化了极大减少了管理负担。4.4 诊断与卸载当事情出错时诊断问题如果某个软件安装或运行出错首先尝试brew doctor这个命令是Homebrew的“健康检查”它会扫描你的Homebrew环境指出常见问题比如错误的权限、冲突的配置、冗余的路径等。根据它的建议进行修复能解决大部分问题。卸载软件# 卸载一个软件 brew uninstall node # 强制卸载即使有其他软件依赖它 brew uninstall --force node # 卸载软件并删除其所有配置文件谨慎 brew uninstall --zap google-chrome注意brew uninstall默认只删除软件本身。对于Cask安装的图形应用有时会残留应用数据在~/Library等目录。--zap选项会尝试删除这些残留但最好还是了解应用数据的存储位置后再操作。5. 进阶技巧与疑难排坑掌握了基本命令你已经能应对90%的场景。下面这些进阶技巧和常见问题的解决思路能让你成为真正的Homebrew高手。5.1 处理依赖冲突brew deps 和 brew uses当你安装新软件失败提示与已安装软件冲突时需要理清依赖关系。# 查看一个软件依赖哪些其他软件 brew deps --tree node # 查看哪些已安装的软件依赖某个特定软件 brew uses --installed python3.11例如你想升级python3.11到python3.12但brew uses发现node和vim都依赖python3.11。这时你就不能简单地卸载旧版需要先考虑这些依赖软件是否兼容新版本Python或者计划将它们一并升级/重装。5.2 安装历史与回滚brew log 和 brew pin查看安装日志# 查看某个软件的安装、升级历史Git日志 brew log -p node这能帮你定位是哪次升级引入了问题。锁定软件版本慎用如果你希望某个关键软件比如生产环境用的特定Python版本永远不被brew upgrade自动升级可以“锁定”它。brew pin python3.11锁定后brew upgrade会跳过它。解锁使用brew unpin python3.11。我建议只在极端情况下使用此功能因为长期不升级可能带来安全风险。5.3 常见错误与解决方案Error: Checksum mismatch.问题下载的软件包校验和不匹配通常是因为网络传输中文件损坏或镜像源的文件与官方源不一致。解决# 删除Homebrew的缓存重新下载 brew cleanup rm -rf $(brew --cache) brew install formula如果问题依旧尝试暂时换回官方源或使用--build-from-source选项。Error: Another active Homebrew process is already in progress.问题Homebrew的进程锁文件被残留通常是因为上次操作被强制中断。解决# 删除锁文件 rm -rf /opt/homebrew/var/homebrew/locks/formula_name.brewing # 或者删除所有锁更彻底 rm -rf /opt/homebrew/var/homebrew/locks/*安装或升级时卡在 Upgrading...或编译阶段。问题从源码编译大型软件如gcc,llvm可能耗时极长数小时。解决耐心等待或检查是否有可用的bottle。可以尝试用CtrlC中断然后加上--force-bottle选项重试如果公式提供了bottle。也可以考虑在夜间进行此类操作。brew命令执行极慢。问题可能是Homebrew在自动执行brew update或者Git操作慢。解决# 关闭自动更新不推荐长期使用但可临时诊断 export HOMEBREW_NO_AUTO_UPDATE1 # 然后运行你的brew命令 # 更根本的解决是确保镜像源配置正确且网络通畅。5.4 我的工作流与最佳实践建议最后分享一套我个人觉得高效且安全的Homebrew日常使用流程定期维护每周或每两周执行一次以下组合命令brew update # 刷新软件列表 brew outdated # 查看哪些需要升级 brew upgrade # 执行升级 brew cleanup -n # 预览可清理的空间 brew cleanup # 执行清理这能保证你的工具链既新且净。项目环境隔离对于不同项目需要不同版本语言解释器如Python、Node.js的情况不要依赖Homebrew来回切换版本。Homebrew更适合管理全局的、系统级的工具。项目级别的版本管理请使用专门的版本管理工具Python: 使用pyenv。Node.js: 使用nvm或fnm。Ruby: 使用rbenv或rvm。 用Homebrew安装这些版本管理器本身然后用它们去管理项目运行时版本这是最清晰的做法。备份你的已安装列表你可以导出一个包含所有已安装公式和cask的列表方便在新机器上快速恢复环境。# 生成恢复脚本 brew bundle dump --file~/Backup/Brewfile --describe --force这会创建一个Brewfile文件。在新系统上安装好Homebrew后只需运行brew bundle install --file~/Backup/Brewfile这是我最喜欢的“一键恢复”功能。Homebrew远不止是一个包管理器它通过良好的设计和对社区资源的整合成为了macOS开发者生态中不可或缺的基础设施。从最初的磕磕绊绊到如今行云流水般地管理上百个工具它节省了我无数的时间和精力。希望这份结合了基础操作与实战经验的指南能帮你扫清入门障碍真正发挥出它的威力让你在Mac上的开发之旅更加顺畅高效。如果在使用中遇到这里没覆盖的奇怪问题不妨再运行一次brew doctor或者去Homebrew的GitHub仓库Issues里搜一搜社区的力量通常能给你答案。