Homebrew :在 Mac 上无痛安装软件

Homebrew 软件包管理器可以让你轻松地在 Mac 上安装和更新应用程序和实用程序。

在我追求“万物自动化”的过程中,我一直坚持走在用代码来管理我的 Mac 笔记本电脑的路上。与其用鼠标或触控板手动管理我的应用程序和实用程序,我更喜欢使用软件包管理软件来安装、更新和删除不需要的软件。

这对 Mac 用户来说是个挑战。Mac 的操作系统 macOS 始终落后于 Linux 的一个地方就是在包管理方面。Mac 用户没有默认的软件包管理器,而 Linux 用户则有很多选择 —— 从熟悉的 yumapt 到现代的 Flatpak。但 Mac 呢?

这就是 Homebrew 的作用。Homebrew(自酿)填补了 MacOS 事实上的软件包管理器的空白(它也是 Linux 上的又一个可选的包管理器)。它为任何熟悉命令行的人提供了令人难以置信的流畅而直接的体验,如果你是新手,它是学习命令行的好方法。

(LCTT 译注:Homebrew 系统中采用了大量针对自酿啤酒相关的比喻,大家在使用过程中会发现这些有趣的形容。)

如果你在 Mac 上还没有 Homebrew,你可以这样来安装:

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

该命令将执行 Homebrew 团队提供的安装程序脚本。如果你喜欢谨慎一点,可以 curl 下来这个文件,审核后再手动运行。

$ curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh --output homebrew_installer.sh
$ more homebrew_installer.sh # 审核该脚本,直到你觉得没问题了
$ bash homebrew_installer.sh

使用“酿造”来管理你的命令行实用程序

Homebrew 号称它“可以安装苹果(或你的 Linux 系统)默认没有安装的必需之物”。安装是通过 brew(酿造)命令进行的,它使我们能够访问成千上万的命令行实用程序,但不是更复杂的应用程序。

对于我们这些搞技术的人来说,符合“必需之物”类别的实用工具包括显示目录结构的方便的 tree 命令和我用来 管理多个 Python 版本pyenv

你可以用 search 子命令看到 Homebrew 中所有的“ 秘方 formula ”,我用 wc 命令显示有多少个“秘方”。

# -l 统计行数
$ brew search | wc -l
    5013

有 5000 多个“秘方”,这是一个不可思议的软件数量。所以,在搜索那个庞大的清单之前,最好先对自己想要的东西有个概念。值得庆幸的是,浏览起来很方便。“秘方”被编入并集中存储到核心库中,核心库按操作系统划分(Mac 在 Homebrew Core,Linux 在 Linux Core)。它们也可以通过 Homebrew API 和网站列出。

口碑是另一个寻找实用工具的好方法。考虑到这一点,如果你正在寻找灵感,这里有一些我的最爱:

  • pyenvrbenvnodenv 分别用于管理 Python、Ruby 和 Node.js 的版本
  • imagemagick 用于可脚本化的图像编辑
  • pandoc 用于可脚本化的文件转换(我经常从 .docx 切换到 .md 或 .html)
  • hub 为 GitHub 用户提供了更好的 Git 体验
  • tldr 提供了解如何使用命令行工具的例子

举个例子,看看 tldr 页面,这是一个用户友好的替代方式,可以滚动浏览应用程序的手册页。你可以通过再次运行 search 来确认它是否可用:

$ brew search tldr
==> Formulae
tldr 

成功了!这个对勾让你知道它是可用的。现在你可以安装它了:

$ brew install tldr
==> Downloading https://homebrew.bintray.com/bottles/tldr-1.3.0_2.catalina.bottle.tar.gz
Already downloaded: /Users/mbbroberg/Library/Caches/Homebrew/downloads/901bc14594a9283e9ab20aec942dc5a9a2befb7e96e1b0fcccb4e3257918813c--tldr-1.3.0_2.catalina.bottle.tar.gz
==> Installing tldr
==> Pouring tldr-1.3.0_2.catalina.bottle.tar.gz
?  /usr/local/Cellar/tldr/1.3.0_2: 6 files, 35.5KB

值得庆幸的是,Homebrew 预先构建了二进制文件,所以你不必在本地机器上从源代码构建。这样就节省了很多时间,并免除了 CPU 风扇的噪音。我对 Homebrew 赞赏的另一件事是,你可以在不完全了解其含义的情况下欣赏此功能。

但如果你喜欢,看看复杂的东西也是很有趣的。对 tldr 运行 info 子命令,你可以看到所有的依赖管理、源代码,甚至公共分析。

$ brew info tldr
tldr: stable 1.3.0 (bottled), HEAD
Simplified and community-driven man pages
https://tldr.sh/
Conflicts with:
  tealdeer (because both install `tldr` binaries)
/usr/local/Cellar/tldr/1.3.0_2 (6 files, 35.5KB) *
  Poured from bottle on 2020-05-20 at 15:12:12
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/tldr.rb
==> Dependencies
Build: pkg-config 
Required: libzip 
==> Options
--HEAD
        Install HEAD version
==> Analytics
install: 2,811 (30 days), 7,875 (90 days), 27,105 (365 days)
install-on-request: 2,806 (30 days), 7,860 (90 days), 27,080 (365 days)
build-error: 0 (30 days)

最后,和其他优秀的软件包管理器一样,Homebrew 的 brew uninstall 子命令可用于快速清理和删除未使用的实用程序。

用“酒桶”管理你的应用程序

命令行实用程序是一匹孤狼,但完整的应用程序呢?Homebrew 保持了其标准命令的简单性,只通过其默认的 brew 命令行界面安装单文件应用。而应用程序不符合这种结构。它们的目录层次比较复杂,比单一的二进制要复杂得多。

幸运的是,Mac 上的 Homebrew 包含了一个名为 cask(酒桶)的子命令,用于处理更复杂的多目录结构。特别好的是,cask 使用了与标准 brew 命令类似的命令结构,所以你可以使用类似的 searchinstallinfo 子命令:

brew search --cask | wc -l
    4772

哇,有近 5000 个应用程序,在 Homebrew 的网站上浏览更方便。

我将用我新喜欢的一款应用来引导你完成 caskMeld(我在 Opensource.com 上读到的)。这是一个功能丰富的编辑器,可以帮助管理合并冲突。在它的网站上有下载的链接,我可以运行安装程序,并将其拖放到我的应用程序文件夹中。但我不想再这样做了,我用的是 Homebrew。

首先,我可以通过稍微不同的语法确认它可以使用:

$ brew search --casks meld
==> Casks
meld

然后我使用 cask 子命令来安装它:

$ brew cask install meld
==> Downloading https://github.com/yousseb/meld/releases/download/osx-19/meldmerge.dmg
==> Downloading from https://github-production-release-asset-2e65be.s3.amazonaws.com/28624006/66cb25
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'meld'.
==> Installing Cask meld
==> Moving App 'Meld.app' to '/Applications/Meld.app'.
==> Linking Binary 'meld.wrapper.sh' to '/usr/local/bin/meld'.
?  meld was successfully installed!

Homebrew 不仅安装了应用程序,而且还在我当前的路径 /usr/local/bin/ 下提供了它。现在,我可以从命令行运行 meld 或从应用程序文件夹中启动应用程序。

更新一切的“酿造升级”

我一直使用软件包管理器的主要原因是,我可以不断升级我的软件,以避免已知的安全漏洞,并确保我总是有最新的功能。如果我手工安装所有的东西,我必须关注每一个工具和应用程序,以了解它是否有自动更新程序,如果没有,就得自己拉回最新的版本。

升级功能是优秀的软件包管理的闪光点。由于我没有什么特殊的版本要求,所以我只需要运行一个命令就可以顺利更新一切:

$ brew upgrade
==> Upgrading 6 outdated packages:
helm 3.2.1 -> 3.2.2
python@3.8 3.8.2_4 -> 3.8.3
ipython 7.14.0 -> 7.15.0
go 1.14.2_1 -> 1.14.3
libzip 1.6.1 -> 1.6.1_1
sqlite 3.31.1 -> 3.32.1

如果你有更复杂的需求,或者想在安装升级前关注一下升级情况,有很多功能标志可供选择。例如,-n 提供了一个 “模拟运行”,列出了可用的升级,而不会进行安装。你也可以 “” 住应用程序版本来防止它升级。

备份你的安装

当该工具允许你像其它点文件的版本控制方案一样备份你的安装环境时,命令行实用程序和应用程序的管理就跳到了一个全新的水平。Homebrew 就有这样的功能,可以在 dump 子命令下使用。它会生成一个 Brewfile,这是一个可重复使用的当前所有安装的工具的列表。要从你的安装的环境中生成一个,进入你的合适的文件夹并运行:

$ cd ~/Development/dotfiles # 这是我的点文件的文件夹
$ brew bundle dump

当我换了机器,想用 Homebrew 安装相同的应用程序时,我就会进入装有 Brewfile 的文件夹并运行。

$ brew bundle

它将在我的新机器上安装所有列出的“秘方”和“酒桶”。

用 Homebrew 进行软件包管理

Homebrew 是我常用的命令行工具和应用程序的管理器。它可以让我保持有条理和及时更新,它的设计在易用性和功能深度之间取得了美丽的平衡。Homebrew 将软件包管理的细节最小化到只需要你知道的程度,大多数用户都会从中受益。

如果你对 Linux 软件包管理器已经驾轻就熟,你可能会认为 Homebrew 太简单了,但不要误以为 Homebrew 的易用性是功能的缺乏。稍微深入一点看,就会发现很多高级选项,远远超出了我在这里向你展示的范围。将 -h 添加到任何 brew 子命令中,会显示可用来升级、删除、故障排除,甚至使用模板贡献新 “秘方” 的丰富功能。

总的来说,Homebrew 可以让一个重度命令行的 Mac 用户变得很开心。此外,它是开源的,所以如果你愿意,你可以贡献代码。尝试一下它,让我知道你的想法,在下面留下评论。


via: https://opensource.com/article/20/6/homebrew-mac

作者:Matthew Broberg 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

THE END