- 包管理器
- 开发工具
【免费下载链接】homebrew-cask
🍻 Default casks (upstream binary packages) for the package manager for everywhere
Homebrew Cask 是 Homebrew 生态中面向"预编译二进制软件包"(GUI 应用、命令行工具、字体、插件等)的安装与管理方案,它把brew install的优雅与简洁延伸到.dmg、.pkg等上游分发格式。本指南以官方 USAGE.md 为核心,结合本仓库的 cask 定义源码,系统讲解brew --cask全系列命令、搜索与安装流程、卸载与清理、更新升级策略、常用选项与持久化配置,以及四种 cask 指定方式与自定义 tap 的使用方法。读完本篇,你将能用一条命令完成 macOS/Linux 上应用的安装、升级与彻底卸载,并理解底层 cask 文件的运作机制。
快速上手:最常用的五个命令
Homebrew Cask 作为 Homebrew 的一部分实现,所有命令都以brew开头,且同时适用于 cask 与 formula。最常用的命令如下:
| 命令 | 作用 |
|---|---|
brew install --cask <token> | 安装指定的 cask |
brew uninstall --cask <token> | 卸载指定的 cask |
brew reinstall --cask <token> | 重新安装指定的 cask |
brew list --cask | 列出已安装的 cask |
brew search --cask <关键词> | 搜索 cask |
以安装 Alfred 为例,官方 README.md 展示了完整输出:
% brew install alfred ==> Fetching downloads for: alfred ✔︎ Cask alfred (5.7.2,2312) Verified 5.6MB/ 5.6MB ==> Installing Cask alfred ==> Moving App 'Alfred 5.app' to '/Applications/Alfred 5.app' 🍺 alfred was successfully installed!注意install --cask是显式指定 cask 类型的写法;当命令后省略--cask时,brew 会根据 token 自动判断是 formula 还是 cask。
搜索 Cask:brew search
在安装之前,先用brew search确认 cask 是否存在。官方 USAGE.md 以 Mozilla Firefox 为例:
$ brew search --cask firefox ==> Casks firefox firefox@cn firefox@esr firefox@beta firefox@developer-edition firefox@nightly Use `brew desc` to list packages with a short description.搜索结果展示了 Homebrew Cask 的 token 命名习惯:同一软件的不同变体通过@后缀区分。在本仓库中,firefox@beta、firefox@esr 等版本化 cask 与主 cask 并存,并使用conflicts_with声明互斥关系,例如 firefox.rb 中的:
conflicts_with cask: [ "firefox@beta", "firefox@cn", "firefox@esr", ]这意味着安装firefox时,若已安装上述冲突变体,brew 会拒绝或提示处理冲突。
安装 Cask:brew install --cask
brew install --cask一次可接受一个或多个 cask token。继续以 Firefox 为例(USAGE.md 中的完整输出):
$ brew install --cask firefox ==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-cask/ba243ff8f7984a43088e0a1721e872cdd9ae7df0/Casks/f/firefox.rb ######################################################################## 100.0% ==> Downloading https://download-installer.cdn.mozilla.net/pub/firefox/releases/128.0/mac/en-US/Firefox%20128.0.dmg ######################################################################## 100.0% ==> Installing Cask firefox ==> Moving App 'Firefox.app' to '/Applications/Firefox.app' ==> Linking Binary 'firefox.wrapper.sh' to '/opt/homebrew/bin/firefox' 🍺 firefox was successfully installed!整个安装流程分为四步:
- 下载 cask 定义文件:brew 先从本仓库拉取最新的
Casks/f/firefox.rb; - 下载应用本体:根据 cask 定义中的
url字段下载.dmg/.pkg等安装包。该 URL 往往内嵌版本号与语言变量,例如 firefox.rb 中的:
url "https://download-installer.cdn.mozilla.net/pub/firefox/releases/#{version}/mac/#{language}/Firefox%20#{version}.dmg"- 校验并安装:brew 依据 cask 中的
sha256校验下载文件的完整性,然后将 App 移动到/Applications; - 创建符号链接:若 cask 定义了
command_wrapper(如 Firefox 将 CLI 包装到/opt/homebrew/bin/firefox),会一并完成二进制链接。
从源码结构看,一个典型 cask 文件由version、sha256、url、name、desc、homepage、livecheck、auto_updates、depends_on、app、uninstall、zap等字段构成,参见 alfred.rb 与 firefox.rb 这两个完整示例。
多语言 cask 与 --language 选项
Firefox cask 的language块多达数十种,每种语言对应独立的sha256(因为不同语言包的下载内容不同)。安装时若未指定语言,则使用default: true标记的默认语言块(firefox.rb):
language "en", default: true do sha256 "fecc46103039ca4a77ecb2b2ef7b03892f922e13db0782f8570c512b2e458515" "en-US" end这也是brew info firefox中 Languages 列表(af, ar, be, ... zh-TW, zh)的来源。
卸载 Cask:brew uninstall --cask
卸载同样简单(USAGE.md):
$ brew uninstall --cask firefox该命令会卸载 cask,并移除之前被移动到/Applications的应用。如需彻底清除应用残留的用户数据,使用uninstall --zap(见下文"其他命令")。
cask 文件中uninstall字段定义了卸载时的附加动作,例如 Firefox 在退出时执行:
uninstall quit: "org.mozilla.firefox"而 Alfred 则同时处理退出与登录项(alfred.rb):
uninstall quit: "com.runningwithcrayons.Alfred", login_item: "Alfred#{version.major}"其他命令与便捷别名
除安装/卸载外,brew还提供以下命令(除特别说明外,均以--cask <token>形式作用于 cask,见 USAGE.md):
| 命令 | 说明 |
|---|---|
brew info --cask <token> | 显示指定 cask 的详细信息 |
brew fetch --cask <token> | 将远端应用文件下载到本地缓存;加--force可忽略缓存强制重下 |
brew --cache --cask <token> | 显示应用文件在 Homebrew 本地缓存中的预期路径 |
brew doctor | 检查配置问题(不带参数运行) |
brew style --cask <token> | 使用 RuboCop 检查指定 cask 的代码风格 |
brew home --cask <token> | 打开该 cask 的主页;不带参数则打开 Homebrew 项目页 |
brew uninstall --zap --cask <token> | 尝试移除与该 cask 关联的所有文件(可能包含与其他应用共享的资源,需谨慎) |
brew outdated --cask | 列出所有过期的 cask |
brew upgrade --cask | 升级所有过期的 cask |
以下命令主要面向 cask 作者(维护者):
| 命令 | 说明 |
|---|---|
brew audit --cask <token> | 验证 cask 的可安装性 |
brew cat --cask <token> | 将指定 cask 的定义输出到标准输出 |
brew create --cask <token> | 创建一个新 cask 并在编辑器中打开 |
brew edit --cask <token> | 编辑指定 cask |
此外,brew 还提供了一组便捷别名/缩写(USAGE.md):
brew ls≡brew listbrew -S≡brew searchbrew rm、brew remove≡brew uninstallbrew dr≡brew doctorbrew abv≡brew infobrew homepage≡brew home
关于 zap 的底层实现
zap的清理范围由 cask 定义中的zap trash:字段决定。以 firefox.rb 为例,它列出了十余项待删除路径(~/Library/Application Support/Firefox、~/Library/Caches/Firefox、~/Library/Preferences/org.mozilla.firefox.plist等),并通过rmdir:在清理后尝试删除可能为空的父目录。zap可能移除与其他应用共享的资源,因此 USAGE.md 明确提示:执行前请确认不会误删共用数据。
检查已安装的 Cask
列出 cask 安装的文件
$ brew list --cask firefox ==> App /Applications/Firefox.app (112 files, 360MB)列出所有已安装的 cask
$ brew list --cask firefox google-chrome opera加--full-name时,来自外部 tap 的 cask 会带上 tap 全名,例如从purple/monkeytap 安装的dishwasher会显示为purple/monkey/dishwasher。
查看 cask 详情
$ brew info firefox ==> firefox: 128.0 (auto_updates) https://www.mozilla.org/firefox/ Not installed From: https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/f/firefox.rb ==> Name Mozilla Firefox ==> Description Web browser ==> Languages af, ar, be, bg, bn, ca, cs, de, en-CA, en-GB, en, eo, es-AR, es-CL, es-ES, fa, ff, fi, fr, gl, gn, gu, he, hi, in, it, ja, ka, ko, mr, my, ne, nl, pa-IN, pl, pt-BR, pt, ru, si, sq, sr, sv, ta, te, th, tl, tr, uk, ur, zh-TW, zh ==> Artifacts Firefox.app (App) /opt/homebrew/Caskroom/firefox/128.0/firefox.wrapper.sh -> firefox (Binary)输出中的(auto_updates)标记对应 cask 定义中的auto_updates true字段(见 firefox.rb),表示该应用自带自动更新机制;From:指向仓库中的 cask 文件;Artifacts列出应用本体(App)与二进制包装(Binary)两类安装产物。
更新与升级:brew update / outdated / upgrade
因为 homebrew-cask 本身就是一个 Homebrew tap,所以每次执行常规的brew update都会顺带拉取最新版本的 cask 定义文件(USAGE.md):
brew outdated --cask:检查哪些 cask 已过期;brew upgrade --cask:升级所有过期的 cask。
需要特别注意的是:许多应用自带自动更新(即 cask 中声明了auto_updates true),这类 cask 默认会被brew outdated与brew upgrade忽略,以免 brew 与应用的自动更新机制冲突。若希望强制纳入检查与升级,可在这两条命令后追加--greedy选项:
$ brew outdated --cask --greedy $ brew upgrade --cask --greedyHomebrew Cask 自身的更新
自 Homebrew 自动将 homebrew-cask 纳入 tap 管理 之后,Homebrew 会自动 tap 并持续保持 homebrew-cask 仓库的更新状态,你无需任何额外操作——只需定期执行brew update即可。
常用选项与持久化配置
brew接受以下与 cask 相关的选项(USAGE.md):
| 选项 | 说明 |
|---|---|
--version | 打印版本号并退出 |
--debug | 输出调试信息 |
--no-binaries | 跳过将可执行二进制符号链接到/opt/homebrew/bin的步骤 |
--require-sha | 若 cask 未定义校验和(sha256),则中止安装 |
--language=<iso-language>[,<iso-language> ...] | 更改待安装 cask 的语言;使用第一个匹配的语言,否则回退到 cask 默认语言 |
还可以通过如下选项修改默认安装位置:
| 选项 | 说明 | 默认值 |
|---|---|---|
--appdir=/my/path | 应用将被移动到的目录 | /Applications |
--fontdir=/my/path | 字体安装目录 | ~/Library/Fonts |
其他默认安装位置(如--prefspanel、--qlplugindir、--servicedir等)及对应修改标志,可查阅man brew。
用 HOMEBREW_CASK_OPTS 持久化默认值
临时在命令行指定选项只对当次命令生效。若希望默认值长期生效,可在.profile、.bash_profile或.zprofile中设置环境变量HOMEBREW_CASK_OPTS(USAGE.md):
# Specify your defaults in this environment variable export HOMEBREW_CASK_OPTS="--appdir=~/Applications --fontdir=/Library/Fonts"命令行中显式提供的选项会覆盖该环境变量。例如即使HOMEBREW_CASK_OPTS指定了~/Applications,下面的命令仍会强制将 Firefox 移动到/Applications:
# Will force the Mozilla Firefox app to be moved to /Applications # even though HOMEBREW_CASK_OPTS specified ~/Applications brew install --appdir="/Applications" firefox与字体 cask 的配合
--fontdir与~/Library/Fonts的默认值直接对应本仓库中庞大的 Casks/font 目录(2600+ 个字体 cask,按font-a/、font-b/等子目录组织)。字体 cask 的安装产物是font工件,例如:
$ brew install --cask font-fira-code配合HOMEBREW_CASK_OPTS="--fontdir=/Library/Fonts"可将字体安装到系统级字体目录,供所有用户使用。
指定 cask 的四种方式
绝大多数brew命令接受 cask token 作为参数。除 token 外,USAGE.md 还列出了另外三种形式:
- 简单 token:如
firefox; - 带 tap 的完整 token:如
homebrew/cask/firefox; - cask 文件的本地路径:如
/opt/homebrew/Library/Taps/homebrew/homebrew-cask/Casks/f/firefox.rb; - 可被 curl 获取的 cask 文件 URI:如
https://raw.githubusercontent.com/Homebrew/homebrew-cask/HEAD/Casks/f/firefox.rb; - 当前工作目录下的 cask 文件:如
my-modified-firefox.rb。
关于第 5 种形式有两个注意点:
- 当 token 与已 tap 的 cask 同名时,已 tap 的 cask 优先;
- 若要强制使用当前目录下的文件,需写成带斜杠的路径名,如
./firefox.rb。
后三种形式主要为希望维护私有 cask(不公开到主仓库)的用户设计:你可以从主仓库复制一份 cask 文件,修改其中的url、version、sha256后通过本地路径或 URI 安装,从而覆盖上游行为。
Taps:自定义 cask 仓库
向现有(或新建的)tap 添加 cask 非常简单(USAGE.md):
You can add casks to your existing (or new) taps: just create a directory named
Casksinside your tap, put your cask files there, and everything will just work.
即:在 tap 根目录下创建Casks目录,把 cask 文件放进去即可。本仓库的目录结构正是这一约定的范本——cask 文件按 token 首字符分目录存放(如Casks/f/firefox.rb、Casks/a/alfred.rb),字体类 cask 集中在 Casks/font 下。
与 cask_renames.json、tap_migrations.json 的关联
仓库根目录还维护着两个与 token 生命周期相关的 JSON 文件:
- cask_renames.json:记录 cask 的历史改名映射,例如
4k-video-downloaderplus→4k-video-downloader+、bob→bob-app、docker→docker-desktop。当你在旧 token 名称下运行命令时,brew 会据此自动重定向到新名称,保证升级路径平滑; - tap_migrations.json:记录迁移到其他 tap 的包,例如
azure-cli、node、python等 CLI 工具迁移到homebrew/core。这些包的 cask 定义已从本仓库移除,安装时应改用brew install <formula>而非--cask。
Tab 补全
Homebrew 为bash、zsh与fish提供了brew命令的 Tab 补全支持,可在交互式 shell 中自动补全 cask token 与子命令,具体启用方式参见 brew 官方 Shell Completion 文档。
排错与进一步阅读
- 遇到问题时,官方 README.md 建议先执行
brew update-reset && brew update重置所有 tap 状态,排除本地过期配置导致的假性故障; - 常见错误(
curl错误、Permission denied、Checksum does not match、source is not there等)的排查方法见 doc/reporting_bugs/error_examples.md; - 为 brew 提交新 cask 的贡献规范见 CONTRIBUTING.md;
- 需要深入理解 cask 定义语法时,可直接阅读仓库中的 Casks/f/firefox.rb(多语言 + 多工件 + zap 的完整范例)与 Casks/a/alfred.rb(多段 version + livecheck 的简洁范例)。
总结
掌握brew --cask系列命令后,日常软件管理的核心循环是:brew search查找 →brew install --cask安装 →brew outdated --cask/brew upgrade --cask升级 →brew uninstall --cask(必要时加--zap)卸载。在此基础上,善用HOMEBREW_CASK_OPTS定制安装目录、用--language选择语言、通过--greedy覆盖自动更新判断,并通过 tap 机制维护私有 cask,即可完全掌控 macOS/Linux 上所有二进制软件的生命周期。
- 包管理器
- 开发工具
【免费下载链接】homebrew-cask
🍻 Default casks (upstream binary packages) for the package manager for everywhere
相关推荐
Homebrew Cask高级用法:自定义安装和配置的完整指南
想要完全掌控macOS应用程序的安装和管理吗?Homebrew Cask为您提供了终极的软件包管理解决方案,让您告别繁琐的拖拽安装方式。本指南将深入探讨Home
包管理器开发工具Homebrew Cask 升级工具:buo/homebrew-cask-upgrade 安装与使用指南
Homebrew Cask 升级工具:buo/homebrew cask upgrade 安装与使用指南 项目介绍 Homebrew Cask 升级工具是一个命
开发工具Homebrew Cask 使用指南:从安装到高级管理
Homebrew Cask 使用指南:从安装到高级管理 前言 Homebrew Cask 作为 macOS 上强大的软件包管理工具,为开发者提供了便捷的 GUI
包管理器开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考