omebrew 軟件包管理器可以讓你輕松地在 Mac 上安裝和更新應用程序和實用程序。
(本文字數:6167,閱讀時長大約:8 分鐘)
在我追求“萬物自動化”的過程中,我一直堅持走在用代碼來管理我的 Mac 筆記本電腦的路上。與其用鼠標或觸控板手動管理我的應用程序和實用程序,我更喜歡使用軟件包管理軟件來安裝、更新和刪除不需要的軟件。
這對 Mac 用戶來說是個挑戰。Mac 的操作系統 macOS 始終落后于 Linux 的一個地方就是在包管理方面。Mac 用戶沒有默認的軟件包管理器,而 Linux 用戶則有很多選擇 —— 從熟悉的 yum 和 apt 到現代的 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 和 網站 列出。
口碑是另一個尋找實用工具的好方法??紤]到這一點,如果你正在尋找靈感,這里有一些我的最愛:
舉個例子,看看 tldr 頁面 ,這是一個用戶友好的替代方式,可以滾動瀏覽應用程序的手冊頁。你可以通過再次運行 search 來確認它是否可用:
$ brew search tldr==> Formulae
tldr ?
成功了!這個對勾讓你知道它是可用的?,F在你可以安裝它了:
$ 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 命令類似的命令結構,所以你可以使用類似的 search、install 和 info 子命令:
brew search --cask | wc -l
4772
哇,有近 5000 個應用程序,在 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/ 下提供了它?,F在,我可以從命令行運行 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 將軟件包管理的細節最小化到只需要你知道的程度,大多數用戶都會從中受益。
如果你對 Linux 軟件包管理器已經駕輕就熟,你可能會認為 Homebrew 太簡單了,但不要誤以為 Homebrew 的易用性是功能的缺乏。稍微深入一點看,就會發現很多高級選項,遠遠超出了我在這里向你展示的范圍。將 -h 添加到任何 brew 子命令中,會顯示可用來升級、刪除、故障排除,甚至使用模板貢獻新 “秘方” 的豐富功能。
總的來說,Homebrew 可以讓一個重度命令行的 Mac 用戶變得很開心。此外,它是開源的,所以如果你愿意,你可以 貢獻代碼 。嘗試一下它,讓我知道你的想法,在下面留下評論。
via: https://opensource.com/article/20/6/homebrew-mac
作者: Matthew Broberg 選題: lujun9972 譯者: wxy 校對: wxy
本文由 LCTT 原創編譯, Linux中國 榮譽推出
Homebrew 是 Mac OSX 上的軟件包管理工具,能在 Mac 中方便的安裝軟件或者卸載軟件,相當于 Linux 下的 apt-get、yum 神器;Homebre 可以在 Mac 上安裝一些 OS X 沒有的 UNIX 工具,Homebrew 將這些工具統統安裝到了 /usr/local/Cellar 目錄中,并在 /usr/local/bin 中創建符號鏈接。 官網地址:brew.sh/index_zh-cn…
在終端里運行以下命令
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
復制代碼
# 搜索包
brew search mysql
# 安裝包
brew install mysql
# 查看包信息,比如目前的版本,依賴,安裝后注意事項等
brew info mysql
# 卸載包
brew uninstall wget
# 顯示已安裝的包
brew list
# 查看brew的幫助
brew –help
# 更新, 這會更新 Homebrew 自己
brew update
# 檢查過時(是否有新版本),這會列出所有安裝的包里,哪些可以升級
brew outdated
brew outdated mysql
# 升級所有可以升級的軟件們
brew upgrade
brew upgrade mysql
# 清理不需要的版本極其安裝包緩存
brew cleanup
brew cleanup mysql
復制代碼
使用 清華鏡像站點 的鏡像
git -C "$(brew --repo)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git
# git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git
# git -C "$(brew --repo homebrew/cask-fonts)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask-fonts.git
# git -C "$(brew --repo homebrew/cask-drivers)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask-drivers.git
# 更換后測試工作是否正常
brew update
復制代碼
git -C "$(brew --repo)" remote set-url origin https://github.com/Homebrew/brew.git
git -C "$(brew --repo homebrew/core)" remote set-url origin https://github.com/Homebrew/homebrew-core.git
# git -C "$(brew --repo homebrew/cask)" remote set-url origin https://github.com/Homebrew/homebrew-cask.git
# git -C "$(brew --repo homebrew/cask-fonts)" remote set-url origin https://github.com/Homebrew/homebrew-cask-fonts.git
# git -C "$(brew --repo homebrew/cask-drivers)" remote set-url origin https://github.com/Homebrew/homebrew-cask-drivers.git
# 更換后測試工作是否正常
brew update
復制代碼
export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles