Homebrew简要

在 Unix 大家族里,每个家族成员都有一项让人引以为豪的技能,那就是 包管理,macOS 也不例外。如果说 Mac App Store 是一家大超市,Homebrew 就是一间精品小铺——如它名字(家酿啤酒)所代表的那样。在使用 Mac 的过程当中,会接触各种 dmg 格式的安装文件,用它们装上的应用往往不知藏身何处;也可能看到一些其他人正在使用命令行工具,往往却不知道如何下载和配置。有了 Homebrew,就能轻松安装、管理、卸载许多应用,一条指令可能就足够了。

解决的问题

更好管理”看不见”的应用,我们可以在 Terminal 使用命令行来轻松安装所需要的包,例如 node:

1
brew install node

命令执行完毕之后,node 被安装到了 /usr/local/Cellar 目录中。 通过 Homebrew 安装的所有包都会被放在这里。 这样做有几个好处,一个是方便集中管理,删除不再使用的软件包,省去了大量软件包散落在各处带来日后清理的头疼问题。另外可以方便更集中的权限管理。

安装

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

常用指令

安装卸载

1
2
3
4
5
6
brew --version 或者 brew -v 显示brew版本信息
brew install <formula> 安装指定软件
brew unistall <formula 卸载指定软件
brew list 显示所有的已安装的软件
brew search text 搜索本地远程仓库的软件,已安装会显示绿色的勾
brew search /text/ 使用正则表达式搜软件

升级软件

1
2
3
4
5
6
7
brew update 自动升级homebrew(从github下载最新版本)
brew outdated 检测已经过时的软件
brew upgrade 升级所有已过时的软件,即列出的以过时软件
brew upgrade <formula>升级指定的软件
brew pin <formula> 禁止指定软件升级
brew unpin <formula> 解锁禁止升级
brew upgrade --all 升级所有的软件包,包括未清理干净的旧版本的包

清理相关

1
2
3
4
5
brew cleanup -n 列出需要清理的内容
brew cleanup <formula> 清理指定的软件过时包
brew cleanup 清理所有的过时软件
brew unistall <formula> 卸载指定软件
brew unistall <fromula> --force 彻底卸载指定软件,包括旧版本

管理”看得见”的应用

Homebrew Cask 是 Homebrew 的扩展,借助它可以方便地在 macOS 上安装 图形界面程序,即我们常用的各类应用。Homebrew 中文含义为自制、自酿酒,Cask 中文含义为桶、木桶,桶装酒是一种成品,也就是说每一个 homebrew cask 都可以直接使用的,比如著名浏览器 Chrome 的 Cask 名称为 google-chrome,那么就可以使用如下命令安装:

1
brew cask install google-chrome

自动管理依赖关系

如果没有包管理工具,我们就需要找到每个组件的下载位置,还要手动管理它们的更新,依赖关系等等,这些事情就需要消耗掉不少的精力。 好在包管理工具已经为我们处理好了这一切,我们要做的只是安装和使用。例如,要下载一个依赖于另一个软件的应用,比如说you-get(一款下载互联网视频的自由软件)需要先安装Python 3Homebrew会要么提醒你电脑缺少所依赖的Python 3,要么恰如其分地把依赖的软件不多不少地安装好,再继续中断的You-Get安装过程(通常情况下会采取后者)。整个过程不但安全可靠,而且简洁优雅,所有软件都来源于其对应的官方网站,并能够安全干净地卸载,而这一切都是普通的安装方式所做不到或做不好的。

终端代理问题

由于境内网络环境的复杂性,有不少情况下我们可能无法正常地更新 brew 和其管理下的应用。而我们日常电脑上使用的一些代理软件,通常没办法自动对终端进行代理,所以需要手动进行一些相应的设置,以方便日后的使用。

之前用的是 proxychains-ng 的一款命令行应用。由于 macOS 升级后的 SIP 限制,在 proxychains.conf 文件中设置 sssocks5 代理,无效了。解决办法是在重启后,在 Recovery mode 下关闭 SIP,但是这种方法现在已经不太推荐了。这里采用的是把代理服务器地址写入 shell 配置文件 .bashrc 或者 .zshrc 的方法,直接在 .bashrc 或者 .zshrc 添加下面内容:

1
2
export http_proxy="http://localhost:port"
export https_proxy="http://localhost:port"

如果使用的是trojan或者Shadowsocks类似的客户端用户,可以手动到应用的高级设置里边查看,如图所示则需要将配置的端口设置为 1080:如下图所示:

homebrew_1

相应的代码如下所示:

1
2
export http_proxy="socks5://127.0.0.1:1080"
export https_proxy="socks5://127.0.0.1:1080"

或者直接设置 ALL_PROXY:

1
export ALL_PROXY=socks5://127.0.0.1:1080

localhost 就是一个域名,域名默认指向 127.0.0.1,两者是一样的。然后ESC后:wq保存文件,接着在终端中执行 source ~/.bashrc,或者退出当前终端再起一个终端。 这个办法的好处是把代理服务器永久保存了,下次就可以直接用了。或者通过设置alias简写来简化操作,每次要用的时候输入 setproxy,不用了就 unsetproxy

补充

关于替换镜像源,个人不推荐使用镜像,会存在延时或抽风的时候。同时改变完成后可能还需要还原,如果一定要使用,推荐USTC(中科大镜像)。

替换

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

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

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

# 替换 Homebrew-bottles
# 对于 bash 用户:
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile
# 对于 zsh 用户:
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zshrc
source ~/.zshrc

重置

1
2
3
4
5
6
7
8
9
10
11
12
# 重置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 -C "$(brew --repo homebrew/cask)" remote set-url origin https://github.com/Homebrew/homebrew-cask.git

# 注释掉bash/zsh配置文件里的有关Homebrew Bottles

参考链接
https://www.zhihu.com/question/31360766/answer/673451632

------本文结束 感谢阅读------