Homebrew :在Mac上無(wú)痛安裝軟件
Homebrew 軟件包管理器可以讓你輕松地在 Mac 上安裝和更新應(yīng)用程序和實(shí)用程序。
在我追求“萬(wàn)物自動(dòng)化”的過(guò)程中,我一直堅(jiān)持走在用代碼來(lái)管理我的 Mac 筆記本電腦的路上。與其用鼠標(biāo)或觸控板手動(dòng)管理我的應(yīng)用程序和實(shí)用程序,我更喜歡使用軟件包管理軟件來(lái)安裝、更新和刪除不需要的軟件。
這對(duì) Mac 用戶來(lái)說(shuō)是個(gè)挑戰(zhàn)。Mac 的操作系統(tǒng) macOS 始終落后于 Linux 的一個(gè)地方就是在包管理方面。Mac 用戶沒(méi)有默認(rèn)的軟件包管理器,而 Linux 用戶則有很多選擇 —— 從熟悉的 yum
和 apt
到現(xiàn)代的 Flatpak。但 Mac 呢?
這就是 Homebrew 的作用。Homebrew(自釀)填補(bǔ)了 MacOS 事實(shí)上的軟件包管理器的空白(它也是 Linux 上的又一個(gè)可選的包管理器)。它為任何熟悉命令行的人提供了令人難以置信的流暢而直接的體驗(yàn),如果你是新手,它是學(xué)習(xí)命令行的好方法。
(LCTT 譯注:Homebrew 系統(tǒng)中采用了大量針對(duì)自釀啤酒相關(guān)的比喻,大家在使用過(guò)程中會(huì)發(fā)現(xiàn)這些有趣的形容。)
如果你在 Mac 上還沒(méi)有 Homebrew,你可以這樣來(lái)安裝:
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
該命令將執(zhí)行 Homebrew 團(tuán)隊(duì)提供的安裝程序腳本。如果你喜歡謹(jǐn)慎一點(diǎn),可以 curl
下來(lái)這個(gè)文件,審核后再手動(dòng)運(yùn)行。
$ curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh --output homebrew_installer.sh
$ more homebrew_installer.sh # 審核該腳本,直到你覺(jué)得沒(méi)問(wèn)題了
$ bash homebrew_installer.sh
使用“釀造”來(lái)管理你的命令行實(shí)用程序
Homebrew 號(hào)稱它“可以安裝蘋(píng)果(或你的 Linux 系統(tǒng))默認(rèn)沒(méi)有安裝的必需之物”。安裝是通過(guò) brew
(釀造)命令進(jìn)行的,它使我們能夠訪問(wèn)成千上萬(wàn)的命令行實(shí)用程序,但不是更復(fù)雜的應(yīng)用程序。
對(duì)于我們這些搞技術(shù)的人來(lái)說(shuō),符合“必需之物”類(lèi)別的實(shí)用工具包括顯示目錄結(jié)構(gòu)的方便的 tree
命令和我用來(lái) 管理多個(gè) Python 版本 的 pyenv
。
你可以用 search
子命令看到 Homebrew 中所有的“秘方”,我用 wc
命令顯示有多少個(gè)“秘方”。
# -l 統(tǒng)計(jì)行數(shù)
$ brew search | wc -l
5013
有 5000 多個(gè)“秘方”,這是一個(gè)不可思議的軟件數(shù)量。所以,在搜索那個(gè)龐大的清單之前,最好先對(duì)自己想要的東西有個(gè)概念。值得慶幸的是,瀏覽起來(lái)很方便。“秘方”被編入并集中存儲(chǔ)到核心庫(kù)中,核心庫(kù)按操作系統(tǒng)劃分(Mac 在 Homebrew Core,Linux 在 Linux Core)。它們也可以通過(guò) Homebrew API 和網(wǎng)站列出。
口碑是另一個(gè)尋找實(shí)用工具的好方法??紤]到這一點(diǎn),如果你正在尋找靈感,這里有一些我的最?lèi)?ài):
pyenv
、rbenv
和nodenv
分別用于管理 Python、Ruby 和 Node.js 的版本imagemagick
用于可腳本化的圖像編輯pandoc
用于可腳本化的文件轉(zhuǎn)換(我經(jīng)常從 .docx 切換到 .md 或 .html)hub
為 GitHub 用戶提供了更好的 Git 體驗(yàn)。tldr
提供了解如何使用命令行工具的例子
舉個(gè)例子,看看 tldr 頁(yè)面,這是一個(gè)用戶友好的替代方式,可以滾動(dòng)瀏覽應(yīng)用程序的手冊(cè)頁(yè)。你可以通過(guò)再次運(yùn)行 search
來(lái)確認(rèn)它是否可用:
$ brew search tldr
==> Formulae
tldr ✔
成功了!這個(gè)對(duì)勾讓你知道它是可用的?,F(xiàn)在你可以安裝它了:
$ 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 預(yù)先構(gòu)建了二進(jìn)制文件,所以你不必在本地機(jī)器上從源代碼構(gòu)建。這樣就節(jié)省了很多時(shí)間,并免除了 CPU 風(fēng)扇的噪音。我對(duì) Homebrew 贊賞的另一件事是,你可以在不完全了解其含義的情況下欣賞此功能。
但如果你喜歡,看看復(fù)雜的東西也是很有趣的。對(duì) tldr
運(yùn)行 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)
最后,和其他優(yōu)秀的軟件包管理器一樣,Homebrew 的 brew uninstall
子命令可用于快速清理和刪除未使用的實(shí)用程序。
用“酒桶”管理你的應(yīng)用程序
命令行實(shí)用程序是一匹孤狼,但完整的應(yīng)用程序呢?Homebrew 保持了其標(biāo)準(zhǔn)命令的簡(jiǎn)單性,只通過(guò)其默認(rèn)的 brew
命令行界面安裝單文件應(yīng)用。而應(yīng)用程序不符合這種結(jié)構(gòu)。它們的目錄層次比較復(fù)雜,比單一的二進(jìn)制要復(fù)雜得多。
幸運(yùn)的是,Mac 上的 Homebrew 包含了一個(gè)名為 cask
(酒桶)的子命令,用于處理更復(fù)雜的多目錄結(jié)構(gòu)。特別好的是,cask
使用了與標(biāo)準(zhǔn) brew
命令類(lèi)似的命令結(jié)構(gòu),所以你可以使用類(lèi)似的 search
、install
和 info
子命令:
brew search --cask | wc -l
4772
哇,有近 5000 個(gè)應(yīng)用程序,在 Homebrew 的網(wǎng)站上瀏覽更方便。
我將用我新喜歡的一款應(yīng)用來(lái)引導(dǎo)你完成 cask
。Meld(我在 Opensource.com 上讀到的)。這是一個(gè)功能豐富的編輯器,可以幫助管理合并沖突。在它的網(wǎng)站上有下載的鏈接,我可以運(yùn)行安裝程序,并將其拖放到我的應(yīng)用程序文件夾中。但我不想再這樣做了,我用的是 Homebrew。
首先,我可以通過(guò)稍微不同的語(yǔ)法確認(rèn)它可以使用:
$ brew search --casks meld
==> Casks
meld
然后我使用 cask
子命令來(lái)安裝它:
$ 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 不僅安裝了應(yīng)用程序,而且還在我當(dāng)前的路徑 /usr/local/bin/
下提供了它?,F(xiàn)在,我可以從命令行運(yùn)行 meld
或從應(yīng)用程序文件夾中啟動(dòng)應(yīng)用程序。
更新一切的“釀造升級(jí)”
我一直使用軟件包管理器的主要原因是,我可以不斷升級(jí)我的軟件,以避免已知的安全漏洞,并確保我總是有最新的功能。如果我手工安裝所有的東西,我必須關(guān)注每一個(gè)工具和應(yīng)用程序,以了解它是否有自動(dòng)更新程序,如果沒(méi)有,就得自己拉回最新的版本。
升級(jí)功能是優(yōu)秀的軟件包管理的閃光點(diǎn)。由于我沒(méi)有什么特殊的版本要求,所以我只需要運(yùn)行一個(gè)命令就可以順利更新一切:
$ 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
如果你有更復(fù)雜的需求,或者想在安裝升級(jí)前關(guān)注一下升級(jí)情況,有很多功能標(biāo)志可供選擇。例如,-n
提供了一個(gè) “模擬運(yùn)行”,列出了可用的升級(jí),而不會(huì)進(jìn)行安裝。你也可以 “釘” 住應(yīng)用程序版本來(lái)防止它升級(jí)。
備份你的安裝
當(dāng)該工具允許你像其它點(diǎn)文件的版本控制方案一樣備份你的安裝環(huán)境時(shí),命令行實(shí)用程序和應(yīng)用程序的管理就跳到了一個(gè)全新的水平。Homebrew 就有這樣的功能,可以在 dump
子命令下使用。它會(huì)生成一個(gè) Brewfile
,這是一個(gè)可重復(fù)使用的當(dāng)前所有安裝的工具的列表。要從你的安裝的環(huán)境中生成一個(gè),進(jìn)入你的合適的文件夾并運(yùn)行:
$ cd ~/Development/dotfiles # 這是我的點(diǎn)文件的文件夾
$ brew bundle dump
當(dāng)我換了機(jī)器,想用 Homebrew 安裝相同的應(yīng)用程序時(shí),我就會(huì)進(jìn)入裝有 Brewfile
的文件夾并運(yùn)行。
$ brew bundle
它將在我的新機(jī)器上安裝所有列出的“秘方”和“酒桶”。
用 Homebrew 進(jìn)行軟件包管理
Homebrew 是我常用的命令行工具和應(yīng)用程序的管理器。它可以讓我保持有條理和及時(shí)更新,它的設(shè)計(jì)在易用性和功能深度之間取得了美麗的平衡。Homebrew 將軟件包管理的細(xì)節(jié)最小化到只需要你知道的程度,大多數(shù)用戶都會(huì)從中受益。
如果你對(duì) Linux 軟件包管理器已經(jīng)駕輕就熟,你可能會(huì)認(rèn)為 Homebrew 太簡(jiǎn)單了,但不要誤以為 Homebrew 的易用性是功能的缺乏。稍微深入一點(diǎn)看,就會(huì)發(fā)現(xiàn)很多高級(jí)選項(xiàng),遠(yuǎn)遠(yuǎn)超出了我在這里向你展示的范圍。將 -h
添加到任何 brew
子命令中,會(huì)顯示可用來(lái)升級(jí)、刪除、故障排除,甚至使用模板貢獻(xiàn)新 “秘方” 的豐富功能。
總的來(lái)說(shuō),Homebrew 可以讓一個(gè)重度命令行的 Mac 用戶變得很開(kāi)心。此外,它是開(kāi)源的,所以如果你愿意,你可以貢獻(xiàn)代碼。嘗試一下它,讓我知道你的想法,在下面留下評(píng)論。