macOS 使用 Homebrew 管理软件包

安装 Homebrew

安装 CLT for Xcode

确保已安装 Command Line Tools:

xcode-select --install

设置 Github Hosts

如果不使用国内网络或者没有遇到 Github DNS 污染问题,不需要设置 Github Hosts。

参考 GitHub Host 项目来设置 Github Hosts。

设置环境变量

如果使用官方镜像下载和更新,无需设置环境变量。

国内可以使用中科大镜像:

echo 'export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.ustc.edu.cn/brew.git"' >> ~/.zshrc
echo 'export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.ustc.edu.cn/homebrew-core.git"' >> ~/.zshrc
echo 'export HOMEBREW_INSTALL_FROM_API=1' >> ~/.zshrc
echo 'export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles"' >> ~/.zshrc
echo 'export HOMEBREW_API_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/api"' >> ~/.zshrc
echo 'export HOMEBREW_PIP_INDEX_URL="https://mirrors.ustc.edu.cn/pypi/simple"' >> ~/.zshrc
source ~/.zshrc

或者使用清华镜像:

echo 'export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"' >> ~/.zshrc
echo 'export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"' >> ~/.zshrc
echo 'export HOMEBREW_INSTALL_FROM_API=1' >> ~/.zshrc
echo 'export HOMEBREW_API_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api"' >> ~/.zshrc
echo 'export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles"' >> ~/.zshrc
echo 'export HOMEBREW_PIP_INDEX_URL="https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"' >> ~/.zshrc
source ~/.zshrc

安装 Homebrew

下载并执行安装脚本:

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

国内可使用中科大的镜像脚本安装:

/bin/bash -c "$(curl -fsSL https://mirrors.ustc.edu.cn/misc/brew-install.sh)"

或者使用清华的镜像安装:

git clone --depth=1 https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/install.git brew-install
/bin/bash brew-install/install.sh
rm -rf brew-install

查看安装的 Homebrew 版本:

brew -v
Homebrew 4.4.32

配置 Homebrew

编译加速

Homebrew 在安装软件时,可能会使用 makecmakeninja 来编译安装,可以设置环境变量默认以启用最大核心并行编译:

# make 
echo 'export MAKEFLAGS="-j$(sysctl -n hw.ncpu)"' >> ~/.zshrc

# cmake
echo 'export CMAKE_BUILD_PARALLEL_LEVEL="$(sysctl -n hw.ncpu)"' >> ~/.zshrc

# ninja
echo 'export NINJAFLAGS="-j$(sysctl -n hw.ncpu)"' >> ~/.zshrc

# source
source ~/.zshrc

关闭自动更新

可选择关闭 Homebrew 每次执行命令时自动更新:

echo 'export HOMEBREW_NO_AUTO_UPDATE=true' >> ~/.zshrc
source ~/.zshrc

恢复使用官方仓库

删除 zsh 配置文件中对应的环境变量配置项。

恢复 Homebrew 仓库地址:

git -C "$(brew --repo)" remote set-url origin https://github.com/Homebrew/brew

恢复 Homebrew Core 仓库:

brew tap --custom-remote --force-auto-update homebrew/core https://github.com/Homebrew/homebrew-core

恢复 Homebrew Cask 仓库:

brew tap --custom-remote --force-auto-update homebrew/cask https://github.com/Homebrew/homebrew-cask

恢复其他 tap 仓库:

brew tap --custom-remote --force-auto-update homebrew/command-not-found https://github.com/Homebrew/command-not-found

更新 Homebrew:

brew update

卸载 Homebrew

执行卸载脚本

执行官方卸载脚本:

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

或者使用清华的卸载脚本镜像:

git clone --depth=1 https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/install.git brew-install
/bin/bash brew-install/uninstall.sh
rm -rf brew-install

脚本执行完需要手动清理残余文件。

The following possible Homebrew files were not deleted:
/usr/local/Cellar/
/usr/local/Homebrew/
/usr/local/bin/
/usr/local/etc/
/usr/local/include/
/usr/local/lib/
/usr/local/openssl/
/usr/local/share/
/usr/local/var/
You may wish to remove them yourself.

清理残留文件

删除 Homebrew 安装时生成的文件:

sudo rm -rf /usr/local/Cellar
sudo rm -rf /usr/local/Homebrew
sudo rm -rf /usr/local/var/homebrew
sudo rm -rf /usr/local/etc/bash_completion.d/brew
sudo rm -rf /usr/local/share/doc/homebrew
sudo rm -rf /usr/local/share/fish/vendor_completions.d/brew.fish
sudo rm -rf /usr/local/share/man/man1/brew.1
sudo rm -rf /usr/local/share/zsh/site-functions/_brew

/usr/local/etc/usr/local/lib/usr/local/share 等目录可能依然存在软件包残留的文件,需要自行甄别选择性删除。

Homebrew 常用命令

更新 Homebrew

brew update

查看软件包

使用关键字或正则搜索 Homebrew 支持的软件包:

brew search <text|/text/>

<text|/text/> 为软件名称关键字或者正则。

查看当前已安装的软件包:

brew ls|list

查看软件包依赖:

# 查看指定软件包的依赖树
brew deps --tree <formula>

# 查看指定软件包当前已安装的依赖
brew deps --installed <formula>

# 查看当前已安装的所有软件包的依赖树
brew deps --tree --installed

查看已安装的所有(指定)软件包缺失依赖:

brew missing [<formula>]

查看指定的软件包详细信息:

brew info <formula>

查看当前已安装的顶级(非依赖)软件包:

brew leaves

安装软件包

# 安装指定软件包(多个用空格隔开)
brew install <formula>

# 跳过依赖直接安装指定软件包
brew install --ignore-dependencies <formula>

# 只安装指定软件包的依赖不安装本身
brew install --only-dependencies <formula>

更新软件包

# 查看所有(指定)软件包是否需要更新
brew upgrade --dry-run [<formula>]

# 更新所有(指定)软件包
brew upgrade [<formula>]

卸载软件包

卸载指定软件包(多个用空格隔开,不会卸载其依赖):

brew uninstall <formula>

卸载孤立的依赖(卸载残留的非顶层的软件包):

# 查看孤立依赖
brew autoremove --dry-run

# 卸载孤立依赖
brew autoremove

符号链接

建立符号链接:

# 手动建立符号链接
brew ln|link <formula>

# 手动覆盖建立符号链接
brew ln|link --overwrite <formula>

删除符号链接:

brew unlink <formula>

Homebrew 符号链接存放目录为 /usr/local/bin ,软件包实际安装目录为 /usr/local/Cellar

清除缓存

清除所有缓存文件和残留的旧版文件:

brew cleanup

故障排查

权限不足

错误信息为:

Error: Permission denied @ apply2files - /usr/local/share/Library/Caches......

问题可能出现在系统升级之后,解决方案:

sudo chown -R $(whoami):admin /usr/local/*
sudo chmod -R g+rwx /usr/local/*

参考文献