Mac 包管理工具 Homebrew
The missing package manager for macOS (or Linux)
Homebrew 是 Mac 上不可或缺的提升效率的工具之一,安装管理三方库非常方便,称之为神器一点也不违和。
安装
命令行安装
1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
常规使用
- 查看帮助,通过帮助命令可以快速的了解工具
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Example usage:
brew search TEXT|/REGEX/
brew info [FORMULA|CASK...]
brew install FORMULA|CASK...
brew update
brew upgrade [FORMULA|CASK...]
brew uninstall FORMULA|CASK...
brew list [FORMULA|CASK...]
Troubleshooting:
brew config
brew doctor
brew install --verbose --debug FORMULA|CASK
Contributing:
brew create URL [--no-fetch]
brew edit [FORMULA|CASK...]
Further help:
brew commands
brew help [COMMAND]
man brew
https://docs.brew.s
- 查看版本
1
2
3
4
brew --version
Homebrew 3.2.13
Homebrew/homebrew-core (git revision 8c2de31c095; last commit 2021-09-23)
Homebrew/homebrew-cask (git revision fc44a06e1b; last commit 2021-09-23)
- 查看配置信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
brew config
HOMEBREW_VERSION: 3.2.13
ORIGIN: git://mirrors.ustc.edu.cn/brew.git
HEAD: 109f24fd601177dea4a754b43efe684903db2a83
Last commit: 8 days ago
Core tap ORIGIN: git://mirrors.ustc.edu.cn/homebrew-core.git
Core tap HEAD: 8c2de31c095c0025f447dd39f978a8506ed86bad
Core tap last commit: 5 days ago
Core tap branch: master
HOMEBREW_PREFIX: /usr/local
HOMEBREW_BOTTLE_DOMAIN: https://mirrors.ustc.edu.cn/homebrew-bottles
HOMEBREW_CASK_OPTS: []
HOMEBREW_MAKE_JOBS: 8
Homebrew Ruby: 2.6.3 => /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby
CPU: octa-core 64-bit haswell
Clang: 13.0.0 build 1300
Git: 2.30.1 => /Applications/Xcode.app/Contents/Developer/usr/bin/git
Curl: 7.64.1 => /usr/bin/curl
macOS: 11.5.2-x86_64
CLT: 13.0.0.0.1.1630607135
Xcode: 13.0
- 安装
1
2
3
4
5
6
7
8
9
10
11
brew install tree
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/tree-1.8.0.big_sur.
######################################################################## 100.0%
==> Pouring tree-1.8.0.big_sur.bottle.tar.gz
🍺 /usr/local/Cellar/tree/1.8.0: 8 files, 157.7KB
如果已经安装可以使用 reinstall 再次安装
brew install tree
Warning: tree 1.8.0 is already installed and up-to-date.
To reinstall 1.8.0, run:
brew reinstall tree
- 卸载
1
2
brew uninstall tree
Uninstalling /usr/local/Cellar/tree/1.8.0... (8 files, 117KB)
- 搜索库
1
2
3
4
5
6
brew search tree
==> Formulae
as-tree datree tree ✔ treecc tre
cherrytree pstree tree-sitter treefrog
==> Casks
figtree sourcetree treesheets
- 查看包信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
brew info ffmpeg
ffmpeg: stable 4.4 (bottled), HEAD
Play, record, convert, and stream audio and video
https://ffmpeg.org/
Not installed
From: git://mirrors.ustc.edu.cn/homebrew-core.git/Formula/ffmpeg.rb
License: GPL-2.0-or-later
==> Dependencies
Build: nasm ✔, pkg-config ✔
Required: aom ✔, dav1d ✔, fontconfig ✔, freetype ✔, frei0r ✔, gnutls ✔, lame ✔, libass ✔, libbluray ✔, libsoxr ✔, libvidstab ✔, libvorbis ✔, libvpx ✔, opencore-amr ✔, openjpeg ✔, opus ✔, rav1e ✔, rubberband ✔, sdl2 ✔, snappy ✔, speex ✔, srt ✔, tesseract ✔, theora ✔, webp ✔, x264 ✔, x265 ✔, xvid ✔, xz ✔, zeromq ✔, zimg ✔
==> Options
--HEAD
Install HEAD version
==> Analytics
install: 72,815 (30 days), 244,572 (90 days), 1,621,840 (365 days)
install-on-request: 57,454 (30 days), 195,761 (90 days), 1,340,918 (365 days)
build-error: 0 (30 days)
- 全面更新
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
➜ ~ brew update
Updated 2 taps (homebrew/core and homebrew/cask).
==> New Formulae
cyral-gimme-db-token lastz neovim-qt
==> Updated Formulae
coreutils ✔ feh literate-git rover
fribidi ✔ flow lmod ruby-build
leptonica ✔ fonttools localstack ruby-install
aliyun-cli fpart logstash rust-analyzer
angular-cli functionalplus mandoc s2n
aravis gd marp-cli salt
arb gdu maxwell seal
awscli geckodriver micronaut semgrep
baobab geph4 minio serverless
bbtools ghz minio-mc simple-scan
bear ghz-web mint smimesign
bgpq3 git-series mockolo snakemake
bison gitfs moto snort
capnp gitless mydumper solidity
cargo-c glooctl nativefier sourcery
cargo-edit gomodifytags nats-server spack
cargo-llvm-lines gomplate ncspot sqlite-utils
cargo-outdated goreleaser neo4j step
cargo-watch gostatic neovim stgit
cdktf gpsd netlify-cli structurizr-cli
cfn-lint graphviz newrelic-cli subfinder
chapel homeassistant-cli no-more-secrets svgo
checkov immudb node swift-format
chezmoi influxdb-cli node-build swift-protobuf
cilium-cli infracost ola terragrunt
circleci ioctl onnxruntime tfsec
citus ipopt openalpr thors-serializer
clarinet ipython opencv@3 tile38
cmark istioctl openssh toast
commitizen itstool orientdb torchvision
conmon jc ormolu truffle
consul-template jruby osm twarc
cpm jsonrpc-glib parallel uftrace
cppad julia pass-git-helper urlview
cppzmq kafka php vala
cubejs-cli kcgi php@7.3 viddy
dar kcptun php@7.4 vips
datalad keptn phpunit virtualenv
datree kn picat vulkan-headers
delve ko pmd webpack
devspace kube-linter pnpm when
digdag kubeconform prestodb whistle
doc8 lean-cli psqlodbc xcodegen
docker-slim libcouchbase pygitup xmrig
dolt libexif pyright xray
dotnet libgit2 questdb xterm
dprint libgit2-glib rabbitmq yosys
druid libmtp radare2 yt-dlp
dvc libphonenumber rancher-cli zeek
esbuild libplctag red-tldr zim
exploitdb libtorch rfcmarkup
fastlane libvmaf richmd
fava libzip riemann-client
==> New Casks
cloudash jupyterlab thetimemachinemechanic
dropbox-capture rancher tidelift
firmaec remarkable
==> Updated Casks
010-editor keeper-password-manager
3dgenceslicer keyman
ableton-live-suite kotlin-native
ajour kstars
almighty kubenav
altair-graphql-client kui
anka-virtualization leapp
anydesk lens
atlauncher librewolf
avocode linear-linear
backblaze loaf
balenaetcher lofi
bibdesk logisim-evolution
blitz logseq
bunch loom
cakebrewjs lrtimelapse
calibre lunar-client
canva macvim
chirp mambaforge
chromedriver metasploit
chromium microsoft-azure-storage-explorer
chronicle microsoft-edge
clamxav microsoft-teams
clash-for-windows miro
clay monitorcontrol
cocktail mtgaprotracker
cog mudlet
coolterm mweb-pro
cozy-drive netron
crystalmaker ocenaudio
cutter onionshare
dash opencore-configurator
datweatherdoe operator
deepl paw
deltachat plex
dingtalk pop
dmenu-mac portfolioperformance
drawio porting-kit
dwarf-fortress qqmusic
dwarf-fortress-lmp quaternion
electron raycast
element rocket-chat
eloston-chromium royal-tsx
enclave sabnzbd
evernote sapmachine-jdk
expressvpn session
fantastical sharemouse
far2l signet
feishu siyuan
figma sparrow
firecamp stats
firefox tableau
flipper telegram
flotato telegram-desktop
foobar2000 tempo
fork temurin
free-download-manager termius
freedom texstudio
freeplane thunderbird
futubull tradingview
fvim trezor-suite
geph tutanota
ghost-browser unity
gns3 unity-android-support-for-editor
google-chrome unity-ios-support-for-editor
google-cloud-sdk unity-linux-support-for-editor
grammarly unity-lumin-support-for-editor
hstracker unity-webgl-support-for-editor
imazing unity-windows-support-for-editor
invoker videofusion
isubtitle webcatalog
isyncr webex
ivideonserver xattred
jamf-migrator ximalaya
jamovi yesplaymusic
jaxx-liberty yinxiangbiji
jprofiler yuque
julia zerotier-one
jumpshare zoom-for-it-admins
keep-it
==> Deleted Casks
microsoft-lync microsoft-r-open
You have 25 outdated formulae and 1 outdated cask installed.
You can upgrade them with brew upgrade
or list them with brew outdated.
- 查看已经安装的包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
brew list
==> Formulae
aom libev ninja
autoconf libevent oniguruma
autojump libffi opencore-amr
automake libgpg-error openjpeg
bdw-gc libidn2 openssl@1.1
brotli libksba opus
c-ares libogg p11-kit
cairo libpng pcre
carthage libpthread-stubs pixman
cmake libsamplerate pkg-config
cocoapods libsndfile python@3.9
coreutils libsodium rav1e
curl libsoxr readline
dav1d libtasn1 rubberband
fdk-aac libtiff sdl2
flac libtool snappy
fontconfig libunistring speex
freetype libuv sphinx-doc
frei0r libvidstab sqlite
fribidi libvorbis srt
gdbm libvpx tesseract
gettext libx11 thefuck
giflib libxau theora
glib libxcb tree
gmp libxdmcp uchardet
gnutls libxext unbound
go libxrender watchman
gobject-introspection libyaml webp
graphite2 little-cms2 wget
guile luajit wrk
harfbuzz lzo x264
icu4c m4 x265
jansson mono xctool
jemalloc mpdecimal xorgproto
jpeg mrffmpeg xvid
jq mujs xz
lame nasm yasm
leptonica nettle zeromq
libass nghttp2 zimg
libbluray nginx zlib
==> Casks
provisionql
- 自我检查与修复
1
brew doctor
开发相关
Formula: brew 是一个通用的工具,理论上可以管理任意包,为了达到通用,brew 就为包安装定义了一套固定流程,所有的包安装步骤都是一样的,把不同的地方,当到包的配置文件里,brew 通过配置文件得知如何安装这个包,这个包依赖了哪些包,从哪里下载这个包,这个包是否提供预编译的二进制等信息,这个配置文件称为 Formula。
tap
存放 Formula 文件的 Git 仓库称为 tap。
- 查看当前 taps
1
2
3
4
5
6
brew tap
homebrew/cask
homebrew/core
homebrew/services
iina/mpv-iina
matt/core
- 创建 tap
创建一个 Git 仓库,创建名为 Formula 的文件夹,然后在里面创建你包的 Formula 文件, 这是一个仓库,所以可以存放很多包,Formula 文件。
第一次写不知道如何写,可以去 homebrew-core 随便找个看下 [Homebrew Formulae](https://formulae.brew.sh/),比如这个是 ffmeg 的 Formula 文件,类名要和包名要一样,否则会报错,不要和已经存在的包同名。
包的 Formula 文件写好后,推送到 Git 服务器,然后让 brew 管理这个仓库,这样 brew 就能找到你这个 tap 里的包了,后续就可以 brew install 了。
1
2
3
4
# tap 路径自己命名,然后跟上 git 仓库地址
brew tap matt/core https://github.com/debugly/BrewFormula.git
# 安装 tap 里包含的库
brew install mrffmpeg
- 编辑 Formula 文件
1
2
3
4
5
6
7
8
9
brew edit mrffmpeg
Warning: edit is a developer command, so
Homebrew's developer mode has been automatically turned on.
To turn developer mode off, run brew developer off
Editing /usr/local/Homebrew/Library/Taps/matt/homebrew-core/Formula/mrffmpeg.rb
Warning: Using vim because no editor was set in the environment.
This may change in the future, so we recommend setting EDITOR,
or HOMEBREW_EDITOR to your preferred text editor.
- 测试 Formula 文件
开发包的 Formula 文件可能存在不合适的地方,需要多次编辑后,然后 install 库测试无误后,把最终的 Formula 文件复制出来,然后放到 git 仓库里提交。
- 对于其他用户,重新安装 tap 就会更新 Formula 文件
untap
移除使用 tap 安装的仓库。
1
2
3
4
5
brew untap matt/core
Error: Refusing to untap matt/core because it contains the following installed formulae or casks:
mrffmpeg
因为 mrffmpeg 库是通过 matt/core 这个 tap 安装的,因此不能移除这个 tap,需要先卸载 mrffmpeg 这个库才行。
1
2
3
4
5
6
7
8
9
brew uninstall mrffmpeg
Uninstalling /usr/local/Cellar/mrffmpeg/4.4_2... (245 files, 234MB)
brew untap matt/core
Untapping matt/core...
Untapped 1 formula (33 files, 28.4KB).
小贴士
1、为了提升安装速度,一定要安装镜像,比如:清华大学开源软件镜像站
2、Homebrew 经常会在执行命令的时候触发更新,如果你的确不想让他更新,可以 Ctrl+c 打断,原本的命令就会继续执行了,因为更新通常会稍微耗点时间如果长时间没有更新的话;建议几个月来一次 brew update ,确保使用的库都是最新最稳定的。
3、遇到问题可以追加 –verbose 查看详细日志
4、通过 brew 安装的包,如果有 lib 或者 dylib 生成,默认会放到 /usr/local/lib/ 下,头文件放在 /usr/local/include 下(里面都是软连接),实际包放在 /usr/local/Cellar/包名/版本 目录下
5、同一个 tap 不可以使用不同的仓库,否则报错:
1
2
3
4
5
6
7
8
brew tap matt/core https://github/debugly/FFmpeg.git
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/services).
No changes to formulae.
Error: Tap matt/core remote mismatch.
https://github.com/debugly/BrewFormula.git != https://github/debugly/FFmpeg.git
参考
Taps (Third-Party Repositories)
[程序员 Homebrew 使用指北 - 少数派 (sspai.com)](https://sspai.com/post/56009)