好用到爆!GitHub 星標 32.5k+的命令列軟體管理神器,功能真心強大!

語言: CN / TW / HK

前言(廢話)

本來打算在公司偷偷摸摸給星球的使用者寫一篇程式設計喵整合 MongoDB 的文章,結果在通過 brew 安裝 MongoDB 的時候竟然報錯了。原因很簡單,公司這臺 Mac 上的 homebrew 環境沒有配置好。剛好 Java 程式設計師進階之路上缺少這樣一篇內容。

所以我就想,不如趁機水一篇吧,啊,不不不,趁機給小夥伴們普及一下 Homebrew 吧!瞧我這該死的大公無私的心(手動狗頭)。

不會吧?不會還有人用 macOS 沒有安裝/配置 Homebrew 吧?

Homebrew 能幹什麼

Homebrew 的 Slogan :The missing package manager for macOS (or Linux)

Homebrew 這款命令列軟體管理神器在 GitHub 上已經有 32.5k+ 的 star 了,功能也真心強大,幾乎 macOS 上的軟體包它都包了。Homebrew 本身沒有問題,問題在於。。。。。不說了,你懂的。

Homebrew 除了是 macOS 的包管理器也可以裝在 Linux 上成為 Linux 的包管理器,僅需要執行相應的命令,就能下載安裝需要的軟體包,省去了下載、解壓、拖拽等繁瑣的步驟。

用 Homebrew 官方的話來總結就是:安裝 Apple(或 Linux 系統)沒有預裝但你需要的軟體。比如說安裝 MongoDB,只需要執行以下命令就可以安裝,前提條件是環境一定要配置好。

brew install mongodb

簡單一條命令,就可以實現包管理,還不用擔心依賴/檔案路徑等問題。

Homebrew 主要由四個部分組成: brew、homebrew-core 、homebrew-cask、homebrew-bottles。

  • brew:Homebrew 的原始碼倉庫
  • homebrew-core:Homebrew 的核心源
  • homebrew-cask:提供 macOS 應用和大型二進位制檔案的安裝
  • homebrew-bottles:預編譯二進位制軟體包

再來了解一下 Homebrew 的接個核心概念,後續會經常用到。

  • formula(e),安裝包的描述檔案,帶 e 為複數
  • cellar,包安裝好後所在的目錄
  • bottle,預先編譯好的包,不需要再下載原始碼編譯,速度會快很多,官方庫中的包大多數是通過 bottle 方式安裝的
  • tap,下載源
  • cask(s),安裝 macOS native 應用的擴充套件,可以理解為有圖形化介面的應用,帶 s 為複數
  • bundle,描述 Homebrew 依賴的擴充套件

安裝配置 Homebrew

世上無難事,只要找到 Homebrew 的正確安裝方式。

按理說,Homebrew 的安裝方式非常簡單,只需要執行官方的一句命令就可以完成安裝了。

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

但國內開發者命苦就苦在,經常會因為網路的原因安裝失敗。原因我只能說這是 http://raw.githubusercontent.com 網站的鍋,誰讓它訪問不穩定呢?

怎麼辦呢?

必須換一種高效且科學的安裝方式,那就是使用映象安裝。 Gitee 上有開源作者提供了一鍵安裝包,只需要執行以下命令就可以了。

/bin/zsh -c "$(curl -fsSL http://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

安裝腳本里提供了中科大、清華大學、北京外國語大學、騰訊、阿里巴巴等下載源。

但過來人告訴你,別選其他映象源,就選中科大,速度槓槓的,40-50M/s,這速度比其他映象源快多了,對比起來,其他就是蝸牛🐌。

這個安裝指令碼非常的智慧,幾乎可以一件幫我們搞定所有問題。

再次感謝 Gitee 上這位大牛,已經 3k star 了,我把地址貼出來:

http://gitee.com/cunkai/HomebrewCN

brew 本體安裝成功後,會提示我們配置國內映象源。

nice,安裝完成了。執行下面這幾個命令體驗下。

  • brew ls 檢視本地命令;
  • brew search mongodb 查詢軟體;
  • brew -v 檢視版本;
  • brew update 更新版本;
  • brew install --cask firefox 安裝圖形化介面軟體
  • brew config 檢視配置。

brew 和 brew cask 的區別

這裡順帶說一下 brew 和 brew cask 的區別,這也是一開始我使用 brew 時困惑的一個點。

以前的版本中,是可以直接 brew cask list 這樣執行命令的,現在改成了 brew list --cask

brew 是從下載原始碼開始,然後編譯(不一定,有些有現成的 bottle)解壓,通過 ./configure && make install 進行安裝,同時會包含相關的依賴庫。環境變數也是自動配置的。

brew cask 是下載解壓已經編譯好了的軟體包(.dmg/.pkg),放在統一的目錄中,省去了手動去下載、解壓、拖拽等蛋疼步驟。

通過 brew search google 我們也可以看得出兩者之間的區別。

  • 「Formulae」一般是那些命令列工具、開發庫、字型、外掛等不含 GUI 介面的軟體。
  • 「Cask」就會包含一些 GUI 圖形化介面的軟體,如 Google Chrome、FireFox 、Atom 等

使用 Homebrew

Homebrew安裝配置完成後,我們來實操體驗兩把。

這裡是 homebrew 常用命令的一個清單,可供參考。

命令| 描述 ---|--- brew update| 更新 Homebrew brew search package| 搜尋軟體包 brew install package| 安裝軟體包 brew uninstall package| 解除安裝軟體包 brew upgrade| 升級所有軟體包 brew upgrade package| 升級指定軟體包 brew list| 列出已安裝的軟體包列表 brew services command package| 管理 brew 安裝軟體包 brew services list| 列出 brew 管理執行的服務 brew info package| 檢視軟體包資訊 brew deps package| 列出軟體包的依賴關係 brew help| 檢視幫助 brew cleanup| 清除過時軟體包 brew link package| 建立軟體包符號連結 brew unlink package| 取消軟體包符號連結 brew doctor| 檢查系統是否存在問題 brew tap [user/repo] | 將開源倉庫新增到源

第一把,使用 Homebrew 安裝 JDK

作為一名 Java 後端程式設計師,JDK 是必須要安裝的,對吧?

1)執行 brew search jdk 查詢有哪些可供安裝的 JDK

2)執行 brew install openjdk@17 安裝 JDK。

3)但我們在 macOS 上安裝了多個版本的 JDK 後,怎麼管理它們呢?可以安裝一下 jEnv,一個幫助我們管理 JAVA_HOME 的命令列工具,在 GitHub 上已經收穫 4.3k 的 star。

GitHub 地址:http://github.com/jenv/jenv

官方文件也非常的簡潔大方:

http://www.jenv.be/

安裝:

brew install jenv

配置:

echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc echo 'eval "$(jenv init -)"' >> ~/.zshrc

新增:

jenv add /usr/local/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home/

JDK 的安裝路徑可以通過下圖的位置查詢。

管理:

jenv versions jenv global 17.0.3

是不是賊方便?再也不用整這 echo 'export PATH="/usr/local/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc 玩意了!爽,實在是爽!

第二把,使用 Homebrew 安裝 MongoDB

先看 MongoDB 的官方文件(當前 release 版本是 5.0,我這裡就先用上一個穩定版 4.4):

http://www.mongodb.com/docs/v4.4/tutorial/install-mongodb-on-os-x/

1)拉取 MongoDB 的源

brew tap mongodb/brew

2)更新 brew

brew update

3)安裝 MongoDB

brew install [email protected]

OK,安裝成功。

小結

通過 Homebrew 下載的軟體基本上來自於官網,所以大可以放心。而且而且它儘可能地利用了系統自帶的各種庫,使得軟體包的編譯時間大大縮短,基本上不會造成冗餘。

這裡順帶給大家提一則小故事,教別人學演算法的大佬可以拿走了:homebrew 的作者去面 Google,被考演算法題: 反轉二叉樹,結果沒通過被拒了,😆

好了好了,今天這篇文章就先水到這吧,我們下期見~


沒有什麼使我停留——除了目的,縱然岸旁有玫瑰、有綠蔭、有寧靜的港灣,我是不繫之舟

本文已收錄到 GitHub 上星標 2.8k+ 的開源專欄《Java 程式設計師進階之路》,據說每一個優秀的 Java 程式設計師都喜歡她,風趣幽默、通俗易懂。內容包括 Java 基礎、Java 併發程式設計、Java 虛擬機器、Java 企業級開發(Git、Nginx、Maven、Intellij IDEA、Spring、Spring Boot、Redis、MySql 等等)、Java 面試等核心知識點。學 Java,就認準 Java 程式設計師進階之路😄。

http://github.com/itwanger/toBeBetterJavaer

star 了這個倉庫就等於你擁有了成為了一名優秀 Java 工程師的潛力。