brew.md 10.8 KB
Newer Older
沉默王二's avatar
沉默王二 已提交
1 2 3 4 5
---
category:
  - Java企业级开发
tag:
  - 辅助工具
沉默王二's avatar
沉默王二 已提交
6 7 8
title: Homebrew,GitHub 星标 32.5k+的 macOS 命令行软件管理神器,功能真心强大!
shortTitle: Homebrew:macOS软件管理器
description: Homebrew,GitHub 星标 32.5k+的 macOS 命令行软件管理神器,功能真心强大!
沉默王二's avatar
沉默王二 已提交
9 10 11
head:
  - - meta
    - name: keywords
沉默王二's avatar
沉默王二 已提交
12
      content: 辅助工具,GitHub,macos Homebrew,Homebrew教程,Homebrew镜像,Homebrew国内安装
沉默王二's avatar
沉默王二 已提交
13 14 15 16
---

## 前言(废话)

沉默王二's avatar
沉默王二 已提交
17
本来打算在公司偷偷摸摸给星球的用户写一篇编程喵整合 MongoDB 的文章,结果在通过 brew 安装 MongoDB 的时候竟然报错了。原因很简单,公司这台 Mac 上的 homebrew 环境没有配置好。刚好 二哥的Java进阶之路上缺少这样一篇内容。
沉默王二's avatar
沉默王二 已提交
18

沉默王二's avatar
沉默王二 已提交
19
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-c6756a26-8767-4135-be4c-b31d42de2a89.png)
沉默王二's avatar
沉默王二 已提交
20 21 22 23 24 25 26 27 28 29 30 31

所以我就想,不如趁机水一篇吧,啊,不不不,趁机给小伙伴们普及一下 Homebrew 吧!瞧我这该死的大公无私的心(手动狗头)。

不会吧?不会还有人用 macOS 没有安装/配置 Homebrew 吧?


## Homebrew 能干什么

>Homebrew 的 Slogan :The missing package manager for macOS (or Linux)

Homebrew 这款命令行软件管理神器在 GitHub 上已经有 32.5k+ 的 star 了,功能也真心强大,几乎 macOS 上的软件包它都包了。Homebrew 本身没有问题,问题在于。。。。。不说了,你懂的。

沉默王二's avatar
沉默王二 已提交
32
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-726f97d9-4de2-4d23-9973-d1a39951a0f7.png)
沉默王二's avatar
沉默王二 已提交
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

Homebrew 除了是 macOS 的包管理器也可以装在 Linux 上成为 Linux 的包管理器,仅需要执行相应的命令,就能下载安装需要的软件包,省去了下载、解压、拖拽等繁琐的步骤。

用 Homebrew 官方的话来总结就是:安装 Apple(或 Linux 系统)没有预装但你需要的软件。比如说安装 MongoDB,只需要执行以下命令就可以安装,前提条件是环境一定要配置好。

```
brew install mongodb
```

简单一条命令,就可以实现包管理,还不用担心依赖/文件路径等问题。

Homebrew 主要由四个部分组成: brew、homebrew-core 、homebrew-cask、homebrew-bottles。

- brew:Homebrew 的源代码仓库
- homebrew-core:Homebrew 的核心源
- homebrew-cask:提供 macOS 应用和大型二进制文件的安装
- homebrew-bottles:预编译二进制软件包

再来了解一下 Homebrew 的接个核心概念,后续会经常用到。

- formula(e),安装包的描述文件,带 e 为复数
- cellar,包安装好后所在的目录
- bottle,预先编译好的包,不需要再下载源码编译,速度会快很多,官方库中的包大多数是通过 bottle 方式安装的
- tap,下载源
- cask(s),安装 macOS native 应用的扩展,可以理解为有图形化界面的应用,带 s 为复数
- bundle,描述 Homebrew 依赖的扩展

## 安装配置 Homebrew

>世上无难事,只要找到 Homebrew 的正确安装方式。

按理说,Homebrew 的安装方式非常简单,只需要执行官方的一句命令就可以完成安装了。

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

但国内开发者命苦就苦在,经常会因为网络的原因安装失败。原因我只能说这是 `https://raw.githubusercontent.com` 网站的锅,谁让它访问不稳定呢?

怎么办呢?

必须换一种高效且科学的安装方式,那就是使用镜像安装。 Gitee 上有开源作者提供了一键安装包,只需要执行以下命令就可以了。

```
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
```

安装脚本里提供了中科大、清华大学、北京外国语大学、腾讯、阿里巴巴等下载源。

沉默王二's avatar
沉默王二 已提交
82
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-e7eaf096-7477-4ed0-814a-07ef8d62884f.png)
沉默王二's avatar
沉默王二 已提交
83 84 85 86 87

但过来人告诉你,别选其他镜像源,就选中科大,速度杠杠的,40-50M/s,这速度比其他镜像源快多了,对比起来,其他就是蜗牛🐌。



沉默王二's avatar
沉默王二 已提交
88
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-f0c3c481-f474-47b2-8b5e-17f8fc2b9a80.png)
沉默王二's avatar
沉默王二 已提交
89 90 91 92 93



这个安装脚本非常的智能,几乎可以一件帮我们搞定所有问题。

沉默王二's avatar
沉默王二 已提交
94
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-7c539545-d26e-45e8-9f81-bb5b439342eb.png)
沉默王二's avatar
沉默王二 已提交
95 96 97 98 99 100

再次感谢 Gitee 上这位大牛,已经 3k star 了,我把地址贴出来:

>[https://gitee.com/cunkai/HomebrewCN](https://gitee.com/cunkai/HomebrewCN)


沉默王二's avatar
沉默王二 已提交
101
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-aebf4ced-58f4-4d31-892c-4a8382cf3677.png)
沉默王二's avatar
沉默王二 已提交
102 103 104 105

brew 本体安装成功后,会提示我们配置国内镜像源。


沉默王二's avatar
沉默王二 已提交
106
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-6866eb09-75fb-4f19-9ff4-b80fd02816e9.png)
沉默王二's avatar
沉默王二 已提交
107 108 109 110

nice,安装完成了。执行下面这几个命令体验下。


沉默王二's avatar
沉默王二 已提交
111
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-33bcd6a1-d843-4a6c-a8ac-0d908095da79.png)
沉默王二's avatar
沉默王二 已提交
112 113 114 115 116 117 118 119 120

- `brew ls` 查看本地命令;
- `brew search mongodb` 查找软件;
- `brew -v` 查看版本;
- `brew update` 更新版本;
- `brew install --cask firefox` 安装图形化界面软件
- `brew config` 查看配置。


沉默王二's avatar
沉默王二 已提交
121
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-ac0e141f-301c-46f1-bd80-5375eb50dc4d.png)
沉默王二's avatar
沉默王二 已提交
122 123 124 125 126 127 128 129 130 131



## brew 和 brew cask 的区别

这里顺带说一下 brew 和 brew cask 的区别,这也是一开始我使用 brew 时困惑的一个点。

以前的版本中,是可以直接 `brew cask list` 这样执行命令的,现在改成了 `brew list --cask`


沉默王二's avatar
沉默王二 已提交
132
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-c5403959-01fd-4610-b08c-4ca4e4cb0a66.png)
沉默王二's avatar
沉默王二 已提交
133 134 135 136

brew 是从下载源码开始,然后编译(不一定,有些有现成的 bottle)解压,通过 `./configure && make install` 进行安装,同时会包含相关的依赖库。环境变量也是自动配置的。


沉默王二's avatar
沉默王二 已提交
137
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-d27ec07e-cf3c-4504-9174-60881d2710fb.png)
沉默王二's avatar
沉默王二 已提交
138 139 140 141 142


brew cask 是下载解压已经编译好了的软件包(.dmg/.pkg),放在统一的目录中,省去了手动去下载、解压、拖拽等蛋疼步骤。


沉默王二's avatar
沉默王二 已提交
143
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-566f4437-62de-49e5-89a7-7c666a2ad9c1.png)
沉默王二's avatar
沉默王二 已提交
144 145 146 147

通过 `brew search google` 我们也可以看得出两者之间的区别。


沉默王二's avatar
沉默王二 已提交
148
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-441127b1-f7ae-484e-801b-5b808f8e283c.png)
沉默王二's avatar
沉默王二 已提交
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

- 「Formulae」一般是那些命令行工具、开发库、字体、插件等不含 GUI 界面的软件。
- 「Cask」就会包含一些 GUI 图形化界面的软件,如 Google Chrome、FireFox 、Atom 等


## 使用 Homebrew

Homebrew安装配置完成后,我们来实操体验两把。

这里是 homebrew 常用命令的一个清单,可供参考。

命令| 描述
---|---
brew update|  更新 Homebrew
brew search package|  搜索软件包
brew install package| 安装软件包
brew uninstall package| 卸载软件包
brew upgrade| 升级所有软件包
brew upgrade package| 升级指定软件包
brew list|  列出已安装的软件包列表
brew services command package|  管理 brew 安装软件包
brew services list| 列出 brew 管理运行的服务
brew info package|  查看软件包信息
brew deps package|  列出软件包的依赖关系
brew help|  查看帮助
brew cleanup| 清除过时软件包
brew link package|  创建软件包符号链接
brew unlink package|  取消软件包符号链接
brew doctor|  检查系统是否存在问题
brew tap [user/repo] | 将开源仓库添加到源

### 第一把,使用 Homebrew 安装 JDK

作为一名 Java 后端程序员,JDK 是必须要安装的,对吧?

1)执行 `brew search jdk` 查找有哪些可供安装的 JDK

2)执行 `brew install openjdk@17` 安装 JDK。


沉默王二's avatar
沉默王二 已提交
189
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-b4d7684b-2db8-4286-bf2e-389c2aed5968.png)
沉默王二's avatar
沉默王二 已提交
190 191 192 193 194

3)但我们在 macOS 上安装了多个版本的 JDK 后,怎么管理它们呢?可以安装一下 jEnv,一个帮助我们管理 JAVA_HOME 的命令行工具,在 GitHub 上已经收获 4.3k 的 star。

>GitHub 地址:[https://github.com/jenv/jenv](https://github.com/jenv/jenv)

沉默王二's avatar
沉默王二 已提交
195
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-1034fcfd-22a7-4968-8b6f-fb2e67d22855.png)
沉默王二's avatar
沉默王二 已提交
196 197 198 199 200 201

官方文档也非常的简洁大方:

>[https://www.jenv.be/](https://www.jenv.be/)


沉默王二's avatar
沉默王二 已提交
202
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-2e10e772-1944-474a-bbfa-b3ef3e0ec9d4.png)
沉默王二's avatar
沉默王二 已提交
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223

安装:

```
brew install jenv
```

配置:

```
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
```

添加:

```
jenv add /usr/local/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home/
```


沉默王二's avatar
沉默王二 已提交
224
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-b126c35d-edab-48a9-9543-831cfd0a51c6.png)
沉默王二's avatar
沉默王二 已提交
225 226 227 228 229


JDK 的安装路径可以通过下图的位置查找。


沉默王二's avatar
沉默王二 已提交
230
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-a32accec-4044-480c-a8c8-3781bc5048b5.png)
沉默王二's avatar
沉默王二 已提交
231 232 233 234 235 236 237 238 239

管理:

```
jenv versions
jenv global 17.0.3
```


沉默王二's avatar
沉默王二 已提交
240
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-cc01fad8-53e9-4474-8923-08e97ac7090a.png)
沉默王二's avatar
沉默王二 已提交
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256

是不是贼方便?再也不用整这 `echo 'export PATH="/usr/local/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc` 玩意了!爽,实在是爽!

### 第二把,使用 Homebrew 安装 MongoDB

先看 MongoDB 的官方文档(当前 release 版本是 5.0,我这里就先用上一个稳定版 4.4):

>[https://www.mongodb.com/docs/v4.4/tutorial/install-mongodb-on-os-x/](https://www.mongodb.com/docs/v4.4/tutorial/install-mongodb-on-os-x/)

1)拉取 MongoDB 的源

```
brew tap mongodb/brew
```


沉默王二's avatar
沉默王二 已提交
257
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-4819ca75-01e3-4dea-8859-7c9ddd570142.png)
沉默王二's avatar
沉默王二 已提交
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274


2)更新 brew

```
brew update
```

3)安装 MongoDB

```
brew install mongodb-community@4.4
```

 OK,安装成功。


沉默王二's avatar
沉默王二 已提交
275
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-e934f3f3-c7de-4537-8c30-73c0e9fb41b4.png)
沉默王二's avatar
沉默王二 已提交
276 277 278 279 280 281 282

## 小结

通过 Homebrew 下载的软件基本上来自于官网,所以大可以放心。而且而且它尽可能地利用了系统自带的各种库,使得软件包的编译时间大大缩短,基本上不会造成冗余。

这里顺带给大家提一则小故事,教别人学算法的大佬可以拿走了:homebrew 的作者去面 Google,被考算法题: 反转二叉树,结果没通过被拒了,😆

沉默王二's avatar
沉默王二 已提交
283
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/brew-8fb73388-ffaf-4241-8584-03e7aa00578b.png)
沉默王二's avatar
沉默王二 已提交
284 285 286

好了好了,今天这篇文章就先水到这吧,我们下期见~

沉默王二's avatar
沉默王二 已提交
287
![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png)
沉默王二's avatar
沉默王二 已提交
288 289