Mac 上的包管理工具 Homebrew 使用

Homebrew 是使用 ruby 语言写的 Mac 系统的包管理工具 (也有 Linux 版本), 在系统默认没有提供相关包的情况下发挥作用. 大多是工程类没有图形界面的包.

Homebrew 的优点是能够判断系统中已经有的组件而不会重复下载, 其他的包管理工具如 MacPorts, Fink, pkgsrc, Gentoo Prefix等都会重复下载系统已有的组件.

himg

安装

1
/usr/bin/ruby -e "$(curl -fsSL [https://raw.githubusercontent.com/Homebrew/install/master/install](https://raw.githubusercontent.com/Homebrew/install/master/install))"

镜像设置 (可选)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# brew
git -C "$(brew --repo)" remote set-url origin https://mirrors.ustc.edu.cn/brew.git

# core
git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git

# cask
git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git

# bottles for zsh 和下面 2 选 1
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zprofile
source ~/.zprofile

# bottles for bash 和上面 2 选 1
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile

基础命令

  • brew install vim: 安装 vim
  • brew install cask: 安装 cask(也是一种软件管理工具, 但是涵盖软件范围广, 基本都是图形界面软件, 比如 QQ 微信等)
  • brew help: 查看简单帮助
  • brew install <package name>: 安装软件包
  • brew uninstall <package name>: 卸载软件包
  • brew list [--versions]: 列出已安装的软件包 (包括版本)
  • brew search <package name>: 查找软件包
  • brew info <package name>: 查看软件包信息
  • brew update: 更新 brew
  • brew cleanup: 清理所有包的旧版本
  • brew outdated: 列出过时的软件包 (已安装但不是最新版本)
  • brew upgrade [<package name>]: 更新过时的软件包 (不指定软件包表示更新全部)
  • brew doctor: 检查 brew 运行状态
  • man brew: 显示使用手册
  • brew pin $FORMULA: 锁定某个包 (以后不会再更新)
  • brew unpin $FORMULA: 取消锁定
  • brew tap buo/cask-upgrade: 安装一个第三方的仓库
    • 第三方仓库需要在GitHub上, 且仓库名必须以 homebrew-开头
    • 此命令的仓库名可以简写, 省略了homebrew-
    • brew install时, 默认的检查顺序如下
      1. pinned taps
      2. core formulae
      3. other taps
  • brew tap-pin user/repo: 固定某个第三方仓库
  • brew tap-info --installed: 列出所有已安装的 taps
  • brew untap buo/cask-upgrade: 删除
  • brew deps --installed --tree: 查看已安装的包的依赖, 树形显示
  • brew install mas: 安装更新官方商店软件的插件
  • mas upgrade: 更新 mas 内需要更新的软件

如何安装旧版本包

以安装 1.2.22 版本的 pyenv 为例

1
2
3
4
5
6
# 1. create a new local tap(ignore this if created)
brew tap-new $USER/local
# 2. extract into our local tap
brew extract --version=1.2.22 pyenv hanley/local
# 3. run brew install@version as usual
brew install pyenv@1.2.22

官方全部包列表

Homebrew Formulae

个人 Homebrew 包清单 (仅供参考)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
autoconf                        libidn2                         python
brew-rmtree libmpc python@3.8
cask libsodium readline
cmake libtasn1 reattach-to-user-namespace
cscope libunistring ruby
ctags libyaml ruby-build
emacs lsd sourcekitten
gcc lua sphinx-doc
gdbm mpfr sqlite
gettext mysql swiftlint
git ncurses tmux
gitup nettle trash
gmp node tree
gnutls openssl@1.1 unbound
highlight p11-kit utf8proc
icu4c pcre2 xz
isl perl yarn
libevent pkg-config yasm
libffi protobuf

小知识

Gem是封装起来的Ruby应用程序或代码库. 在终端使用的gem命令, 是指通过RubyGems管理Gem包.

rvm 用于帮你安装Ruby环境, 帮你管理多个Ruby环境, 帮你管理你开发的每个Ruby应用使用机器上哪个Ruby环境. Ruby环境不仅仅是Ruby本身, 还包括依赖的第三方Ruby插件. 都由RVM管理.

curl 全称是 commandline url, 是在命令行模式下工作, 利用 URL 的语法进行数据的传输或者文件的传输

[Cask](https://github.com/Homebrew/homebrew-cask)

介绍

brew 中的一个 gui 软件管理命令

基础命令

  • brew install --cask <software name>: 安装软件
  • brew install --cask <software name> --force: 强制安装 (可用在已有 dmg 安装的情况下)
  • brew uninstall --cask <software name> : 卸载软件
  • brew zap --cask <software name>: 将与此包相关的所有文件全部删除 (可能会删除与其他包共享的一些文件)
  • brew search --cask <software name>: 根据名称搜索相关软件
  • brew info --cask <software name>: 查看软件相关信息
  • brew list --cask: 列出通过 Homebrew-Cask 安装的包
  • brew fetch --cask <software name>: 下载远程软件包到本地文件夹 (不安装)
  • brew outdated --cask : 列出过期的软件包
  • brew upgrade --cask: 升级所有包
  • brew tap buo/cask-upgrade: 安装第三方仓库, 此仓库可以帮助用户检查更新并更新所有 cask
  • brew cu -a: 通过执行上一个命令后, 可用此命令更新所有 cask 下载的软件. 如果使用默认的 brew cask upgrade会导致部分自动更新的软件不被列出进而不能更新.

个人 cask 软件包清单 (仅供参考)

1
2
3
4
5
6
7
8
9
10
11
12
1password            eudic                iterm2               omnifocus            qlvideo              suspicious-package
alfred firefox itsycal omnigraffle qq transmit
aliwangwang fliqlo kap omnioutliner quicklook-json tuxera-ntfs
baidunetdisk folx karabiner-elements omniplan quicklookase typora
bartender fork keycastr paw sf-symbols visual-studio-code
betterzip gemini loopback pdf-expert shadowsocksx-ng-r webpquicklook
beyond-compare get-backup-pro macvim permute slack wechat
chromedriver github monitorcontrol picgo snipaste xscope
dash google-chrome moom qlcolorcode sogouinput
default-folder-x google-earth-pro neteasemusic qlimagesize spotify
downie iina nextcloud qlmarkdown sublime-text
dropbox imazing obs qlstephen surge

[rmtree](https://github.com/beeftornado/homebrew-rmtree)

这个包很简单, 功能就是将一个已安装包, 且将只用于该包的所有依赖全部删除, 非常实用!

安装

brew tap beeftornado/rmtree && brew install brew-rmtree: 安装第三方 tap 并将该 tap 下的包 brew-rmtree 安装到本机

使用

brew rmtree <package name>: 删除该包并将其所有依赖删除

[bundle](https://github.com/Homebrew/homebrew-bundle)

这个功能可以让我们备份恢复软件

  • brew bundle dump --describe --force --file="~/Desktop/Brewfile": 生成备份文件
    • --describe: 为列表中的命令行工具加上说明性文字.
    • --force: 直接覆盖之前生成的 Brewfile 文件. 如果没有该参数, 则询问你是否覆盖.
    • --file="~/Desktop/Brewfile": 在指定位置生成文件. 如果没有该参数, 则在当前目录生成 Brewfile 文件.
  • brew bundle install --file="~/Desktop/Brewfile": 根据 Brewfile 批量安装软件
  • brew bundle check: 检查是否 Brewfile 中的所有依赖已经安装
  • brew bundle list: 列出 Brewfile 中的所有依赖
  • brew bundle cleanup: 将 Brewfile 中所有未列出的依赖全部删除