前言
Homebrew
是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。使用Homebrew
已经好多年了,但都是需要就去搜一下,没有仔细总结过,今天打算把一些使用记录下来。
安装
Homebrew
的安装很方便,官网也直接给出了安装命令,只是可能需要科学上网,这里记录了一些国内的可用安装地址和国内提供的源镜像,来避免需要科学上网的问题,同时也再次表示感谢。
安装之前先说一下版本问题,Homebrew 4.0
进行了一项最大的改动,组织方式从Git仓库管理改为JSON文件下载。JSON配置文件会从formulae.brew.sh下载,本地的homebrew/core
、homebrew/cask
两个仓库都不会被使用。网上很多资料还是针对Homebrew 4.0
以前版本的。另一个就是如果用mac电脑,你可能默认使用的shell是zsh,这时候执行安装命令的时候需要使用/bin/zsh
来代替/bin/bash
.
1
2
3
# 查看默认shell
echo $SHELL
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
# 安装 可能需要科学上网
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 卸载 可能需要科学上网
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
# 如果是zsh可以用
/bin/zsh -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 也可以换成国内源,避免科学上网
/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/Homebrew.sh)" speed
# 卸载
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/HomebrewUninstall.sh)"
# 另一个国内安装地址
/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"
# 另一个卸载
/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/uninstall.sh)"
换国内源
由于官方提供的源都是国外源,下载的时候特别慢,通常的解决办法是换成国内源。这里还是需要说明一下,Homebrew
是通过ruby
和shell
开发的,他的官网安装其实就是通过shell
命令使用git下载了github上的Homebrew
源代码,然后做了一些设置。这里的换源其实都是在更换git地址。另一个需要说明的还是Homebrew 4.0
以后本地的homebrew/core
、homebrew/cask
两个仓库都不会被使用,所有也就不需要换源了。网上很多换源还是针对Homebrew 4.0
以前版本。另一个就是如果用mac电脑,你可能默认使用的shell是zsh
,这时候需要改的是~/.zshrc
而不是~/.bash_profile
.
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
# 官方源
# 替换brew.git:
cd "$(brew --repo)"
git remote set-url origin https://github.com/Homebrew/brew.git
# 替换homebrew-core.git:
# 这个不需要了
# cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
# git remote set-url origin https://github.com/Homebrew/homebrew-core.git
# 替换homebrew-cask.git:
# 这个不需要了
# cd "$(brew --repo)/Library/Taps/homebrew/homebrew-cask"
# git remote set-url origin https://github.com/Homebrew/homebrew-cask.git
# 应用生效
brew update
# 删除.bash_profile变量
vim ~/.bash_profile
# 如果使用zsh
vim ~/.zshrc
# 删除如下变量
# export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles
# 执行更新
source ~/.bash_profile
# 中科大
# 替换brew.git:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
# 替换homebrew-core.git:
# 这个不需要了
# cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
# git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
# 替换homebrew-cask.git:
# 这个不需要了
# cd "$(brew --repo)/Library/Taps/homebrew/homebrew-cask"
# git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git
# 应用生效
brew update
# 替换homebrew-bottles: 如果使用的是zsh,这里要注意换成写入~/.zshrc
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile
# 阿里
cd "$(brew --repo)"
git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git
# 不需要了
# cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
#git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git
# 这里要注意,如果用的是zsh,需要写入~/.zshrc
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile
使用
查看一个帮助,可以简单浏览一下命令,但是这不是全部,全部的命令要看man brew
.
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
# 帮助,然后帮助下的命令不是全部,如果要看完整文档,需要 man brew
brew -h
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.sh
注意,通过帮助我们会发现很多的命令后面都会带一个[FORMULA|CASK...]
:
FORMULA:意思是一些软件包,一般是命令行工具、开发库、一些字体、插件,共性是不提供界面,提供给终端或者是开发者使用。
cask 是用户软件,比如 chrome、mvim、wechat、wechatwork 这些提供用户交互界面的软件。
先看看帮助里面的常用命令:
1
2
3
4
5
6
7
8
9
10
11
12
# 查找软件包
brew search mysql
# 结果
==> Formulae
automysqlbackup mysql-client mysql-connector-c++ mysql@8.0
mysql mysql-client@5.7 mysql-search-replace mysqltuner
mysql++ mysql-client@8.0 mysql@5.7 ✔ qt-mysql
==> Casks
mysql-connector-python mysql-shell mysqlworkbench navicat-for-mysql sqlpro-for-mysql
我们会发现几个问题: 1、搜索的模糊搜索的。 2、搜索结果明确区分是Formulae
、Casks
。 3、注意一下mysql@5.7
后面有个对钩,这表明这是已经安装了。 4、我们会发现同样是mysql
,有mysql@5.7
、mysql@8.0
,这个对安装的时候选择版本很重要,一般mysql
为最新版本,而且会随着新版本发布而更新。而mysql@8.0
这样的一般是为了指定版本号,如果有小版本号变化也会更新。而且有些软件是没有带版本好的版本的。如果需要历史版本需要使用另外的方式。后续安装会详细介绍
1
2
3
4
5
6
7
# 安装软件包
brew install mysql
brew install mysql@5.7
brew install php.rb
这里先介绍一下我认为的brew的管理方式。执行brew --prefix
命令,我的会看到/usr/local
,可能不同的人看的的不一样,这个是Homebrew的前缀。他的下面可以找到几个主要的目录:
- Homebrew:brew的安装目录,里面是Homebrew的git源码
- Cellar:所有通过brew安装的软件(不包含cask类型软件)
- opt:当前使用的版本,软连接
- etc:配置文件放这里,比如nginx的
- var:数据放这里,比如mysql的数据
- Caskroom:所有通过brew安装的cask软件
- bin:当前使用的版本的软连接(主二进制)
- sbin:当前使用的版本的软连接(主shell)
我们会发现,这里面好几个都是软连接实现的。因为brew对版本的管理就是通过软连接实现的。这里详细说一下Cellar
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
tree -L 2 Cellar
Cellar
├── consul
│ └── 1.16.2
├── go
│ └── 1.21.2
├── mysql@5.7
│ └── 5.7.44_1
├── openssl@1.1
│ └── 1.1.1w
├── openssl@3
│ └── 3.2.1
└── php@7.3
└── 7.3.33_8
上面是Cellar目录,Cellar下面是我们的软件包,然后下面是版本。我们先看Cellar下面的目录,会发现有两种类型,即:版本号和没有版本号。 1、没有版本号:如go。他是通过brew install go
安装的,他会安装最新版本的软件。他下面的版本也是最新版本,但是有时候会出现两个版本,这是因为之前安装过,现在又安装了新的,旧的版本可以通过brew cleanup
清理掉,或者在下一次更新也会清理掉(旧的版本是也是会保留多个的,必须手动清理)。 2、有版本号:可以看到openssl有两个,openssl@1.1
和openssl@3
。这样的软件包就是通过brew install openssl@1.1
安装的,这两个版本可以切换brew link openssl@1.1
和brew link openssl@3
,但是没有指定版本的,不能通过brew link
命令进行切换
这里面有一个问题,如nginx软件执行brew search nginx
并没有带版本号的包,那是不是只能使用最新版呢?不是的。这就是第三种安装方式。
1、打开https://formulae.brew.sh/,在上面搜索
2、进入github 3、选择历史版本 4、下载历史版本安装代码 5、安装
1
2
3
4
5
6
# 需要先删除已经安装的,否则有各种问题
brew uninstall nginx
# 安装需要的版本
brew install nginx.rb
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
# 移除软件
brew uninstall nginx
# 更新软件包
brew upgrade # 升级所有可以升级的软件们
brew upgrade nginx # 升级某个包
# 查看安装的软件包
brew list
# 查看软件包的信息
brew info nginx
# 更新Homebrew自己
brew update
# 查看可以更新的软件
brew outdated # 检查过时(是否有新版本),这会列出所有安装的包里,哪些可以升级
brew outdated nginx # 检查包
# 查看配置信息
brew config
# 清理所有已安装的软件的旧版本
brew cleanup # 清理所有包的旧版本及其安装缓存
brew cleanup nginx # 清理指定包的旧版本
brew cleanup -n # 查看可清理的旧版本包,不执行实际操作
# 锁定不想更新的包
brew pin nginx # 锁定某个包
brew unpin nginx # 取消锁定
# 检查brew运行状态
brew doctor
# 服务相关命令
brew services list # 查看 services 列表
brew services run mysql # 启动 mysql 服务
brew services start mysql # 启动 mysql 服务,并注册开机自启
brew services stop mysql # 停止 mysql 服务,并取消开机自启
brew services restart mysql # 重启 mysql 服务,并注册开机自启
brew services cleanup # 清除已卸载应用的无用配置
结束语
还有一些不常用命令,具体使用可以通过man brew
查看。
说一个自己使用的想法,从使用mac系统就一直使用Homebrew。但是作为软件管理,总感觉对于历史版本问题很别扭。之前是保留多个版本可以按需切换,记得有一个brew switch
命令,不知道啥时候没了,现在用brew link
切换带版本号的软件包(形如:mysql@5.7),而不带版本的软件包(形如:nginx)一直不知道如何切换,之前都是手动修改软链。另一个问题就是一些默认设置,比如删除旧版本、更新等等。