在我“自动化一切事物”的探索中,我一直在努力像管理代码一样管理我的 Mac 笔记本电脑,因为它本质上就是代码。我更喜欢使用软件包管理软件来安装、更新和移除不需要的软件,而不是点击和手动管理我的应用程序和实用工具。
这对 Mac 用户来说是一个挑战。Mac 操作系统 macOS 一直落后于 Linux 的一个地方是软件包管理。Mac 用户没有默认的软件包管理器,而 Linux 用户有许多选择——从熟悉的 yum
和 apt
到现代选择 Flatpak。但是我们呢?
这就是 Homebrew 的用武之地。Homebrew 填补了 macOS 事实上的软件包管理器的空白(并且是 Linux 的另一种选择)。它为任何熟悉命令行的人提供了极其流畅和直接的体验,如果您是命令行新手,这也是学习命令行的一种好方法。
如果您使用的是 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 # review the script until you feel comfortable
$ bash homebrew_installer.sh
使用 brew 管理您的命令行实用工具
Homebrew 自豪地宣称它“安装了 Apple(或您的 Linux 系统)默认未安装的东西”。安装通过 brew
命令进行,这使我们可以访问数千个命令行实用工具,但不能访问更复杂的应用程序。
对于我们这些技术人员来说,属于“您需要的东西”类别的实用工具包括方便的 tree
命令(显示目录结构)和 pyenv
(我用它来管理多个 Python 版本)。
您可以使用 search
命令查看 Homebrew 提供的所有“配方”,我使用 wc
命令显示有多少配方
# -l counts the number of lines
$ brew search | wc -l
5013
有超过 5,000 个配方,这是一个惊人的软件数量。因此,最好在搜索这个庞大的列表之前,先确定您想要什么。幸运的是,浏览起来很容易。配方被编纂并集中到核心存储库中,这些存储库按操作系统划分(Mac 在 Homebrew Core 中,Linux 在 Linux Core 中)。它们也可以通过 Homebrew API 和 网站上列出 获取。
口口相传是寻找实用工具的另一种好方法。考虑到这一点,如果您正在寻找灵感,这里有一些我最喜欢的工具
pyenv
、rbenv
和nodenv
分别用于管理 Python、Ruby 和 Node.js 版本imagemagick
用于可脚本化的图像编辑pandoc
用于可脚本化的文档转换(我经常在 .docx 到 .md 或 .html 之间切换)hub
为 GitHub 用户提供更好的 Git 体验tldr
用于提供如何使用命令行实用工具的示例
以 tldr pages 为例,它是滚动浏览应用程序手册页面的用户友好替代方案。您可以再次运行 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
可用于快速清理和移除未使用的实用工具。
使用 brew casks 管理您的应用程序
命令行实用工具非常棒,但是完整的应用程序呢?Homebrew 使其标准命令保持简单,并且仅通过其默认的 brew
命令行界面安装单文件应用程序。应用程序不符合该结构。它们具有更复杂的目录层次结构,远不止单个二进制文件。
幸运的是,Mac 上的 Homebrew 包含一个名为“casks”的子命令,用于处理更复杂的多目录结构。特别好的是,cask
使用与标准 brew
命令类似的命令结构,因此您可以使用类似的 search
、install
和 info
步骤
brew search --cask | wc -l
4772
哇,还有将近 5,000 个应用程序可以浏览,在 Homebrew 的网站上更容易浏览。
我将通过我最喜欢的新应用程序之一 cask
向您介绍:Meld(我在 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 更新所有内容
我始终如一地使用软件包管理器的主要原因是为了我可以持续升级我的软件,以避免已知的安全漏洞并确保我始终拥有最新的功能。如果我手动安装所有内容,则必须密切关注每个工具和应用程序,以了解它是否具有自动更新程序,如果没有,则自己下载最新版本。
升级是出色软件包管理发挥作用的地方。由于我对版本没有特殊要求,因此我只需运行一个命令即可平稳地更新所有内容
$ 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 # This is my dotfile folder
$ brew bundle dump
当我更换机器并想使用 Homebrew 安装相同的应用程序时,我转到包含 Brewfile 的文件夹并运行
$ brew bundle
它将在我的新机器上安装所有列出的配方和 casks。
使用 Homebrew 进行软件包管理
Homebrew 是我管理命令行实用工具和应用程序的首选管理器。它使我保持井井有条和最新状态,并且其设计在易用性和功能深度之间实现了完美的平衡。Homebrew 将软件包管理细节最小化到您只需要知道的程度,并且大多数用户都将从中受益。
如果您已经熟悉 Linux 软件包管理器,您可能会认为 Homebrew 太简单了,但不要将 Homebrew 的易用性误认为缺乏功能。深入研究一下,就会发现许多超出我在此处向您展示的范围的高级选项。将 -h
添加到任何 brew
子命令都会显示可用于升级、移除、故障排除甚至使用模板贡献新配方的丰富功能。
总的来说,Homebrew 让成为一名挥舞命令行的 Mac 用户成为一种乐趣。此外,它是开源的,因此如果您愿意,可以回馈代码。试一试,并在下面留下评论,告诉我您的想法。
3 条评论