文章

Homebrew

初识

Homebrew 是一个用于 macOS 系统的开源软件包管理器,也被移植到了 Linux 作为 Linuxbrew。它的设计目标是简化 MacOS 系统上的包管理工作,包括安装、更新以及删除等。

以下是一些 Homebrew 的主要特性:

  1. 简易安装:你只需要在命令行中输入简单的命令,Homebrew 就可以帮你安装所需的软件包。

  2. 集中管理与更新软件包:通过 brew upgrade 命令,你可以一次性更新所有你希望更新的软件包,而不用分别去官网下载最新版本安装包和手动进行更新。

  3. 自动解决依赖:Homebrew 在安装软件包的时候会自动下载和安装所有依赖的软件包,这确保了软件的正常运行。

  4. 容易卸载:你只需要执行 brew uninstall 命令,Homebrew 便会安全地卸载你的软件包,连同它的依赖一起。

  5. 常用软件覆盖广:Homebrew 拥有大量的“formulae”,这些都是由社区维护的软件包脚本,你通常可以找到绝大多数你需要的开源软件。

使用 Homebrew,你可以避免许多手动安装、更新以及管理软件包的繁琐步骤,从而将更多的精力投入到使用这些工具本身去。

目录介绍

这些是 Homebrew 在 MacOS 系统上创建和使用的主要目录,每个目录都有它自己的特定功能。

  • /usr/local/Homebrew:这是 Homebrew 程序本身的主目录。所有 Homebrew 的源代码和执行文件都存储在这个目录中。当你升级 Homebrew 时,就是这个目录下的内容在更新。

  • /usr/local/Caskroom:Caskroom 是 Homebrew 的一个扩展,它允许你使用同样的 Brew 命令来安装 MacOS 的 GUI 应用程序。每当你通过 Homebrew Cask 安装一个应用时,它的所有文件都会被放在一个单独的目录内,这个目录就在 /usr/local/Caskroom/应用名

  • /usr/local/Cellar:这是所有 Homebrew 安装的包的存放地。当你使用 Homebrew 安装某个包时,它会在 Cellar 目录下为这个包创建一个新的目录,然后将包的所有文件都放在这个目录中。关于每个包的版本信息,也都会被保存在此。

总的来说,这些目录使得 Homebrew 能够成功且在清晰的结构下管理和追踪所安装的所有应用和包。

常用命令介绍

brew 又称 Homebrew,是 macOS 操作系统的一个最广为被接受的包管理器之一。主要用于自动化下载、编译并安装软件。以下是一些 brew 的常用命令:

  1. 安装 Homebrew

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

  1. 查看 brew 版本

brew -v

  1. 搜索软件

brew search <软件名>

  1. 安装软件

brew install <软件名>

  1. 卸载软件

brew uninstall <软件名>

  1. 更新 Homebrew 自身

brew update

  1. 更新所有 Homebrew 安装的软件

brew upgrade

  1. 查看已安装的软件

brew list

  1. 获取某个软件的信息

brew info <软件名>

  1. 检查是否有问题的命令

brew doctor

  1. 清理不需要的文件

brew cleanup

以上就是一些 brew 的常用命令,使用这些命令可以轻松管理 macOS 上的各种软件包。

Homebrew 的两个术语:

  • Formulae:软件包,包括了这个软件的依赖、源码位置及编译方法等;

  • Casks:已经编译好的应用包,如图形界面程序等。

例如,我想查找 jdk 相关的包

lennon@lennonMac-Pro Homebrew % brew search jdk
==> Formulae
openjdk             openjdk@11          openjdk@17          openjdk@8           jd                  mdk                 cdk

==> Casks
adoptopenjdk                graalvm-jdk                 microsoft-openjdk           oracle-jdk-javadoc          semeru-jdk-open
gama-jdk                    jdk-mission-control         oracle-jdk                  sapmachine-jdk

这个命令的结果显示了通过 Homebrew 可以查找并安装的与jdk相关的所有工具。它们被分为 "Formulae" 和 "Casks" 两个部分。

  • Formulae: 这部分列出的都是可以通过 Homebrew 在命令行环境下安装的 JDK 版本,比如 openjdk@11 表示是 openjdk 的 11 版本。

  • Casks这部分列出的是通过 Homebrew Cask 可以安装的 GUI 应用程序。这些都是第三方提供的 JDK。例如,oracle-jdk 是甲骨文公司提供的 JDK。

举例来讲,如果需要安装 openjdk 的 11 版本,可以在命令行中执行 brew install openjdk@11 命令,Homebrew 就会自动下载并安装相应的 JDK。类似的,如果希望安装特定的 GUI 应用程序,例如 oracle-jdk,只需要运行 brew install --cask oracle-jdk 即可。

换源

国内可供选择的包括但不限于 , 清华源,中科大,阿里源

因为我在江苏,通过 ping 命令得到,阿里源的延迟最小。

ping mirrors.ustc.edu.cn -c 4
ping mirrors.aliyun.com -c 4
ping mirrors.tuna.tsinghua.edu.cn -c 4

输入 brew config,我们得到如下信息

HOMEBREW_VERSION: 4.2.5
ORIGIN: https://mirrors.aliyun.com/homebrew/brew.git
HEAD: 9c8374d3b78c4f531c5c2c0d272d1fb1f1b60d70
Last commit: 4 days ago
Core tap JSON: 26 Jan 02:14 UTC
Core cask tap JSON: 26 Jan 02:14 UTC
HOMEBREW_PREFIX: /opt/homebrew
HOMEBREW_BOTTLE_DOMAIN: https://mirrors.aliyun.com/homebrew/homebrew-bottles
HOMEBREW_CASK_OPTS: []
HOMEBREW_MAKE_JOBS: 10
Homebrew Ruby: 3.1.4 => /opt/homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/bin/ruby
CPU: 10-core 64-bit arm_blizzard_avalanche
Clang: 15.0.0 build 1500
Git: 2.39.3 => /Library/Developer/CommandLineTools/usr/bin/git
Curl: 8.4.0 => /usr/bin/curl
macOS: 14.3-arm64
CLT: 15.1.0.0.1.1700200546
Xcode: N/A
Rosetta 2: false

分两种,一种是 4.0 及其以上,只需要更换 ORIGIN和声明HOMEBREW_BOTTLE_DOMAIN就可以了。

4.0 及其以上

具体操作如下:

# 修改 brew.git 为阿里源
$ git -C "$(brew --repo)" remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git

# 修改 homebrew-core.git 为阿里源
$ git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git

# zsh 替换 brew bintray 镜像
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.zshrc
$ source ~/.zshrc

# bash 替换 brew bintray 镜像,
# 自 MacOS Catalina(2019年) 版本后,zsh 已经成为默认的 shell,如果在此版本之后,此处可以不设置
# ubuntu 默认的仍然是 bash,需要替换这个
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.bash_profile
$ source ~/.bash_profile

# 刷新源
$ brew update

4.0 以下

博客传送门:原文地址

# 查看 brew.git 当前源
$ cd "$(brew --repo)" && git remote -v
origin    https://github.com/Homebrew/brew.git (fetch)
origin    https://github.com/Homebrew/brew.git (push)

# 查看 homebrew-core.git 当前源
$ cd "$(brew --repo homebrew/core)" && git remote -v
origin    https://github.com/Homebrew/homebrew-core.git (fetch)
origin    https://github.com/Homebrew/homebrew-core.git (push)

# 修改 brew.git 为阿里源
$ git -C "$(brew --repo)" remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git

# 修改 homebrew-core.git 为阿里源
$ git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git

# zsh 替换 brew bintray 镜像
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.zshrc
$ source ~/.zshrc

# bash 替换 brew bintray 镜像
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.bash_profile
$ source ~/.bash_profile

# 刷新源
$ brew update

错误分析

4.0 及其以上版本替换 homebrew/core 仓库时,会报如下错误:

lennon@lennonMac-Pro homebrew % git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git
fatal: cannot change to '/opt/homebrew/Library/Taps/homebrew/homebrew-core': No such file or directory

这是因为 4.0 以后 homebrew/corehomebrew/cask 等目录不会被默认创建,有需要的话,执行:

brew tap homebrew/core
brew tap homebrew/cask

GitHub 原文地址:原文地址

License:  CC BY 4.0