安装
#全自动安装脚本,包含更换源
/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)"
术语
以下是 homebrew 官方文档中出现的一些术语
| 英文 | 直译 | 实际含义 |
|---|---|---|
| formula(e) | 公式;配方 | 安装包的描述文件,formulae 为复数 |
| cask | 木桶 | 装酒的器具,表示具有 GUI 界面的原生应用,安装 macOS native 应用的扩展 |
| keg | 小桶 | 表示某个包某个版本的安装目录,比如 /usr/local/Cellar/foo/0.1。 |
| Cellar | 地窖 | 存放酒的地方,表示包的安装目录,比如 /usr/local/Cellar。 |
| Caskroom | 木桶间 | 表示类型为 Cask 的包的安装目录,比如:/usr/local/Caskroom。 |
| tap | (插入)水龙头 | 下载启用某个源 |
| bottle | 瓶子 | 表示预先编译好的包,下载好直接使用,不需要现场下载编译源码,速度会快很多; 官方库中的包大多都是通过 bottle 方式安装 |
| bundle | 捆 | 描述 Homebrew 依赖的扩展 |
这些术语只是帮我们更好的理解 homebrew 是如何管理各种各样的包的,他们其中有些是我们可以在文件命名中看到的,有些只是一种抽象概念。 比如 Tap 可以理解为启用一个源 brew tap xxx,xxx是没有任何配方的,只是扩展程序,比如homebrew- services,所以tap可以理解为扩展;也可以理解为 homebrew 支持的一种机制,允许从第三方源下载包。
组成
-
brew(Homebrew 源代码仓库):
- 这是 Homebrew 的核心命令行工具,用户通过它来执行各种包管理操作,例如安装、更新、删除软件等。
- Homebrew 主程序本身包含了所有的逻辑代码,比如:
- 安装和管理包:通过
brew install安装软件。 - 更新软件:通过
brew update获取配方和核心代码的更新。 - 升级软件:通过
brew upgrade更新已安装的软件。 - 搜索软件:通过
brew search查找可用的包。 - 信息显示:通过
brew info获取已安装软件的详细信息。
- 安装和管理包:通过
- Homebrew 主程序的 Git 仓库地址是:
https://github.com/Homebrew/brew。
-
homebrew-core(Homebrew 核心公式库):
homebrew-core是 Homebrew 的 核心软件包公式库,存放了 Homebrew 默认支持的软件包配方(Formula)。- 每个软件包的配方定义了如何下载、编译、配置和安装一个软件包。比如,如果你运行
brew install git,Homebrew 会从homebrew-core仓库中获取 git 的配方并执行安装。 - 核心公式库包括了大量的命令行工具和开发工具包,像
git,python,node,wget等常见软件都在其中。 homebrew-core的 Git 仓库地址是:https://github.com/Homebrew/homebrew-core。
-
homebrew-cask(Homebrew Cask 仓库):
- 提供 macOS 应用和大型二进制文件的安装,专门用于管理 图形界面应用(GUI) 的安装。
- 它通过 Cask 配方(类似于 Core 中的 Formula 配方)来定义如何安装桌面应用、字体、插件等。比如,使用
brew install --cask google-chrome可以安装 Google Chrome。 - Homebrew Cask 在默认情况下包含大量常用的 GUI 应用程序,例如
Google Chrome,Slack,Visual Studio Code,Tunnelblick等。 - cask-versions,Homebrew Cask 和 Homebrew 一样,默认库只维护最新版本。
-
homebrew-tap(源):
- Homebrew 支持的软件源,本质上是 Git 仓库,用户可以创建和维护自己的 tap 仓库,允许用户从 第三方 仓库添加额外的软件包或应用。
- 你可以通过
brew tap添加额外的仓库,例如:brew tap caskroom/cask或brew tap homebrew/cask来获得更多软件的安装选项。
-
Homebrew 本地缓存与资源目录:
- Homebrew 会在本地缓存一些下载的数据,以便在下一次安装或更新时加速过程。缓存目录通常位于:
~/Library/Caches/Homebrew:缓存软件包的下载文件。/usr/local/Homebrew:Homebrew 本身的安装目录。
- 这些缓存数据有助于提高安装效率,并避免重复下载相同的软件包。
- Homebrew 会在本地缓存一些下载的数据,以便在下一次安装或更新时加速过程。缓存目录通常位于:
-
homebrew-services (后台服务仓库):
- 用于在 macOS (launchctl) 与 Linux (systemctl) 上管理 brew 安装的后台服务。例如,安装一些需要常驻后台运行的应用(如数据库、代理服务、Web 服务器等)。
brew services [start|]允许你启动、停止和管理这些服务,确保它们在系统启动时自动启动。
工作原理
- 当你执行
brew install <package>时,Homebrew 会从homebrew-core或你添加的其他 Tap 仓库中获取相应的配方(Formula),然后通过编译源代码或直接下载预编译的二进制包进行安装。 - 如果你执行
brew update,Homebrew 会更新 Homebrew 主程序 和所有已配置的公式源,确保你获得最新的软件包版本。 - 通过
brew cask install <app>,Homebrew 会安装图形界面应用,并将其放入/Applications文件夹。
查看brew安装列表
➜ ~ brew ls
==> Formulae
brotli icu4c@76 lz4 nrm openvpn
c-ares libnghttp2 lzo nvm pkcs11-helper
ca-certificates libuv node openssl@3
==> Casks
看到formulae下有安装的openvpn,看看安装的在哪
➜ ~ which openvpn
/opt/homebrew/sbin/openvpn
可以看到它的安装路径,让我们访问它
➜ ~ ls -l /opt/homebrew/sbin/openvpn
lrwxr-xr-x@ 1 lihanting admin 37 2 21 14:47 /opt/homebrew/sbin/openvpn -> ../Cellar/openvpn/2.6.13/sbin/openvpn
可以看到输出了个软链接,指向了cellar,即真正的物理地址在cellar下面
更换homebrew的源
这里记录一些有关brew的命令,在没有git时更换brew的源可以通过在 ~/.zshrc 文件中添加环境变量来,比如 HOMEBREW_BREW_GIT_REMOTE="mirrors.ustc.edu.cn/brew.git" 。由于brew是基于git的,所以有了git后也可以通过git命令更换源。
#查看brew.git当前源
git -C "$(brew --repo)" remote -v
git -C "$(brew --repo homebrew/core)" remote -v
# 查看 homebrew-core.git 当前源
$ cd "$(brew --repo homebrew/core)" && git remote -v
origin https://github.com/Homebrew/homebrew-core.git (fetch)
origin https://github.com/Homebrew/homebrew-core.git (push)
# 修改 brew.git 为阿里源
$ git -C "$(brew --repo)" remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git
# 修改 homebrew-core.git 为阿里源
$ git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git
# zsh 替换 brew bintray 镜像
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.zshrc
$ source ~/.zshrc
# bash 替换 brew bintray 镜像
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.bash_profile
$ source ~/.bash_profile
# 刷新源
$ brew update