無論你是想要更舒服地從 Mac 搬到 Linux,仍是不滿意常規的 Linux 包管理器,均可以試試 Homebrew。html
Homebrew 項目最初是爲了給 Mac 用戶提供一個非官方的 Linux 式的包管理器。用戶很快就愛上了它友好的界面以及幫助性的提示,並且,它已經被移植到 Linux 系統 —— 這看起來像是一個奇怪的命運轉折。node
一開始,有兩個分開的項目分別針對 macOS 和 Linux (Homebrew 與 Linuxbrew),可是如今是由 Homebrew 核心管理着這兩個操做系統。因爲我正 從 Mac 切換到 Linux,因此一直在研究我在 macOS 最經常使用的開源軟件在 Linux 表現如何,最終,我很高興地發現 Homebrew 對 Linux 的支持太讚了!linux
長期使用 Linux 的用戶對 Homebrew 的第一反應是:「爲何不直接使用……呢」,省略號表明他們喜歡的某個 Linux 包管理器。基於 Debian 的系統早就有了 apt
,基於 Fedora 的系統則有 dnf
和 yum
,而且像 Flatpak 跟 AppImage 這樣的項目,在兩種系統上都能流暢運行。我花了很多時間嘗試這些技術,不得不說,它們都有其強大之處。git
那我爲何還要 堅持使用 Homebrew 呢?首先,我對它很是熟悉。在爲我過去使用的專有軟件尋找開源替代品的過程當中,我已經學會了許多使用方法,而保持一些熟悉的東西,好比 Homebrew,可讓我專一於一次學習一件事情,而不是被不一樣系統間的差別搞垮。github
此外,我沒有看到哪個包管理器像 Homebrew 同樣,對用戶如此友好。正如默認的幫助命令同樣,命令井井有理:shell
$ brew -h
Example usage:
brew search [TEXT|/REGEX/]
brew info [FORMULA...]
brew install FORMULA...
brew update
brew upgrade [FORMULA...]
brew uninstall FORMULA...
brew list [FORMULA...]
Troubleshooting:
brew config
brew doctor
brew install --verbose --debug FORMULA
Contributing:
brew create [URL [--no-fetch]]
brew edit [FORMULA...]
Further help:
brew commands
brew help [COMMAND]
man brew
<https://docs.brew.sh>
複製代碼
過於簡短的輸出可能會被誤解爲它功能侷限,可是你簡單看看每個子命令,都有很豐富的功能。雖然上面的列表只有短短 23 行,但對高級用戶來講,光是子命令 install
就包含整整 79 行的幫助信息:瀏覽器
$ brew --help | wc -l
23
$ brew install --help | wc -l
79
複製代碼
它能夠選擇忽略或者安裝依賴關係,也能夠選擇用源代碼編譯以及用什麼編譯器來編譯某個確切的上游 Git 提交,或者選擇應用的官方 「灌裝」 版。總而言之,Homebrew 即適合新手,也一樣能知足老鳥。ruby
若是你想要試着使用 Homebrew,能夠用這個單行腳本在 Mac 或者 Linux 上進行安裝:bash
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
複製代碼
這條命令會當即開始安裝 Homebrew。若是你比較謹慎,可使用 curl
將該文件下載到本地,檢查完畢以後再運行。app
$ curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh --output homebrew_installer.sh
$ more homebrew_installer.sh # 審覈該腳本,直到你以爲沒問題了
$ bash homebrew_installer.sh
複製代碼
對 Linux 的安裝步驟還包括如何配置點文件,對於 Debian 系統來講是 ~/.profile
,對於 Fedora 系統是 ~/.bash_profile
。
$ test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
$ test -r ~/.bash_profile && echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.bash_profile
$ echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.profile
複製代碼
爲了確認已經安裝好,Homebrew 團隊提供一個空的 hello
「祕方」 供測試:
$ brew install hello
==> Downloading https://linuxbrew.bintray.com/bottles/hello-2.10.x86_64_linux.bottle.tar.gz
######################################################################## 100.0%
==> Pouring hello-2.10.x86_64_linux.bottle.tar.gz
🍺 /home/linuxbrew/.linuxbrew/Cellar/hello/2.10: 52 files, 595.6KB
複製代碼
看起來安裝毫無問題,讓我來試試更多操做。
Homebrew 宣稱本身是一款默認只 「安裝你須要而 [Linux] 沒有的東西」的應用程序。
你能夠用 brew
命令安裝任何打包在 Homebrew 中的命令行軟件。這些包的定義文件叫作 「祕方」,並且它們經過「瓶子」來編譯並分享。在 Homebrew 的世界裏,還有許多 「啤酒方面」 的術語,但這個包管理器主要目的是讓軟件便於使用。
都有些什麼樣的軟件呢?對我這樣的技術玩家(既然你已經在讀這篇文章,估計你也是)來講最方便的東西。例如,便利的 tree
命令,能夠展現目錄結構,或者 pyenv
,我用它來 在 Mac 管理不一樣版本 Python。
你能夠用 search
命令查看全部能夠安裝的「祕方」,在後面加上 wc
命令看看一共有多少:
# -l 選項統計行數
$ brew search | wc -l
5087
複製代碼
迄今爲止,一共有 5000 多個 「祕方」,這囊括了不少軟件。須要注意的是:並不是全部 「祕方」 都能在 Linux 運行。在 brew search --help
輸出中有一節提到能夠按軟件運行的操做系統來篩選軟件。它會在瀏覽器打開用於每一個操做系統的軟件倉庫。我運行的是 Fedora,因此我會用它來試一試:
$ brew search --fedora tree
複製代碼
瀏覽器打開了網址 https://apps.fedoraproject.org/packages/s/tree
,向我展現了全部 Fedora 的可用選項。你也能夠經過其它方法進行瀏覽。「祕方」 被集中整理到由操做系統劃分的核心倉庫當中(Mac 在 Homebrew Core,Linux 在 Linux Core)。一樣也能夠經過 Homebrew API 在網頁顯示。
即便有這些選擇,我仍是經過其它用戶的推薦找到不少新工具。我列出一些我最喜歡的工具,你能夠在裏面找點靈感:
pyenv
、rbenv
和 nodenv
用來管理(相應的) Python、Ruby 和 Node.js 版本imagemagick
用於腳本化編輯圖片pandoc
用於腳本化轉換文檔格式(我一般將 .docx 文件轉成 .md 或者 .html)hub
爲 GitHub 用戶提供 更好的 Git 體驗tldr
展現了命令工具的使用範例想要深刻了解 Homebrew,能夠去 trldr 頁面 看看,比起應用的 man 頁面,它要友好得多。使用 search
命令確認你能夠安裝:
$ brew search tldr
==> Formulae
tldr ✔
複製代碼
太好了!對勾說明你能夠安裝。那麼繼續吧:
$ brew install tldr
==> Downloading https://linuxbrew.bintray.com/bottles/tldr-1.3.0_2.x86_64_linux.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring tldr-1.3.0_2.x86_64_linux.bottle.1.tar.gz
🍺 /home/linuxbrew/.linuxbrew/Cellar/tldr/1.3.0_2: 6 files, 63.2KB
複製代碼
Homebrew 提供了編譯好的二進制文件,因此你沒必要在本地機器上從源碼編譯。這能節省不少時間,也不用聽 CPU 風扇的噪聲。我很欣賞 Homebrew 的另一點是,你不徹底理解每個選項的含義也不會影響正常使用。若你想本身編譯,能夠在 brew install
命令後面加上 -s
或者 --build-from-source
標識,這樣就能從源碼編譯 「祕方」(即使已經有一個 「瓶子」 存在)。
一樣,軟件底層的複雜性也頗有意思。使用 info
能夠查看 tldr
軟件的依賴管理,「祕方」 的源代碼存放在磁盤上的何處,甚至還能查看公開分析。
$ 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)
/home/linuxbrew/.linuxbrew/Cellar/tldr/1.3.0_2 (6 files, 63.2KB) *
Poured from bottle on 2020-06-08 at 15:56:15
From: https://github.com/Homebrew/linuxbrew-core/blob/master/Formula/tldr.rb
==> Dependencies
Build: pkg-config ✔
Required: libzip ✔, curl ✔
==> Options
--HEAD
Install HEAD version
==> Analytics
install: 197 (30 days), 647 (90 days), 1,546 (365 days)
install-on-request: 197 (30 days), 646 (90 days), 1,546 (365 days)
build-error: 0 (30 days)
複製代碼
在 macOS,Homebrew 的 cask
(「酒桶」)子命令可讓用戶使用命令行安裝、管理整個應用軟件。不幸的是,cask
還不能在任何 Linux 發行版上使用。我在安裝一個開源工具時發現了這點:
$ brew cask install tusk
Error: Installing casks is supported only on macOS
複製代碼
我在 論壇上 問了一下,很快獲得其餘用戶的反饋。總結一下,方案以下:
最後一個是我最感興趣的。Homebrew 經過 建立並維護 「水龍頭」 (另外一個受啤酒影響的術語)管理第三方倉庫。隨着你對系統愈來愈熟悉,並想加入生態系統, 「水龍頭」 是值得研究的。
我最中意的 Homebrew 特性之一就是你能夠像其它任何 用版本控制工具來備份點文件 同樣備份你的安裝記錄。爲了實現這個目的,Homebrew 提供 bundle
(「捆紮」)子命令,它能夠控制一個叫 dump
(「傾倒」)的子命令生成一個 Brewfile
。這個文件包含你目前全部安裝的工具列表,能夠重複使用。進入你想使用的目錄而後運行命令,它會根據你所安裝的軟件生成 Brewfile
:
$ cd ~/Development/dotfiles # This is my dotfile folder
$ brew bundle dump
$ ls Brewfile
Brewfile
複製代碼
當我換了一臺機器,想要安裝同樣的軟件時,進入含有 Brewfile
的文件夾,而後從新安裝:
$ ls Brewfile
Brewfile
$ brew bundle
複製代碼
它會在個人新機器上安裝全部列出的 「祕方」。
Brewfile
很是適合備份你目前的安裝記錄,可是若是某些在 Mac 上運行的軟件沒法運行在 Linux 呢?或者恰好相反?我發現不論是 Mac 仍是 Linux,若是軟件沒法在當前操做系統運行,Homebrew 會優雅地忽略那一行。若是它遇到不兼容的請求(好比使用 brew
在 Linux 安裝 「酒桶」 時),它會選擇跳過,繼續安裝過程:
$ brew bundle --file=Brewfile.example
Skipping cask licecap (on Linux)
Skipping cask macdown (on Linux)
Installing fish
Homebrew Bundle complete! 1 Brewfile dependency now installed.
複製代碼
爲了保持配置文件的簡潔,我在兩個操做系統上使用同一份 Brewfile
,由於它只安裝與操做系統相關的版本,因此我一直沒有遇到任何問題。
Homebrew 已經成了我必備的命令行工具,因爲我很熟悉它,因此在 Linux 上的體驗也充滿樂趣。Homebrew 讓個人工具井井有理,而且時刻保持更新,我愈發欣賞它在實用性與功能上找到的平衡點。我更喜歡將軟件包管理的細節保持在用戶須要瞭解的最小程度,大多數人都會從中受益。若是你已經很熟悉 Linux 包管理器了,Homebrew 可能會讓你以爲很基礎,但稍微深刻一點看,就會發現它的高級選項遠遠超過本文的內容。
對 Linux 用戶來講,他們有不少包管理器能夠選擇。若是你來自 MacOS,Homebrew 會讓你賓至如歸。
via: opensource.com/article/20/…
做者:Matthew Broberg 選題:lujun9972 譯者:nophDog 校對:wxy