首页 Homebrew管理工具使用笔记
文章
取消

Homebrew管理工具使用笔记

前言

  Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。使用Homebrew已经好多年了,但都是需要就去搜一下,没有仔细总结过,今天打算把一些使用记录下来。

安装

  Homebrew的安装很方便,官网也直接给出了安装命令,只是可能需要科学上网,这里记录了一些国内的可用安装地址和国内提供的源镜像,来避免需要科学上网的问题,同时也再次表示感谢。

  安装之前先说一下版本问题,Homebrew 4.0进行了一项最大的改动,组织方式从Git仓库管理改为JSON文件下载。JSON配置文件会从formulae.brew.sh下载,本地的homebrew/corehomebrew/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是通过rubyshell开发的,他的官网安装其实就是通过shell命令使用git下载了github上的Homebrew源代码,然后做了一些设置。这里的换源其实都是在更换git地址。另一个需要说明的还是Homebrew 4.0以后本地的homebrew/corehomebrew/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、搜索结果明确区分是FormulaeCasks。 3、注意一下mysql@5.7后面有个对钩,这表明这是已经安装了。 4、我们会发现同样是mysql,有mysql@5.7mysql@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.1openssl@3。这样的软件包就是通过brew install openssl@1.1安装的,这两个版本可以切换brew link openssl@1.1brew link openssl@3,但是没有指定版本的,不能通过brew link命令进行切换

  这里面有一个问题,如nginx软件执行brew search nginx并没有带版本号的包,那是不是只能使用最新版呢?不是的。这就是第三种安装方式。

1、打开https://formulae.brew.sh/,在上面搜索 搜索

2、进入github 进入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)一直不知道如何切换,之前都是手动修改软链。另一个问题就是一些默认设置,比如删除旧版本、更新等等。

本文由作者按照 CC BY 4.0 进行授权

ruby版本管理工具rbenv

关于人工智能的漫谈