原本想着macOS使用Homebrew對你們沒啥難度,以前就分享了一篇介紹homebrew-bundle備份恢復的文章,不過長期使用後仍是以爲有必要作一下總結,道理也很簡單,越簡單越頻繁使用的產品就越值得挖掘一些背本身忽視的小技巧,由於若是能夠作到天天節省5分鐘那麼量變可能會成爲質變。html
2019年09月11日 - 更新轉載Homebrew 深度應用
2019年09月08日 - 初稿mysql
閱讀原文 - https://wsgzao.github.io/post...linux
擴展閱讀git
Homebrewgithub
macOS使用homebrew-bundle優雅的備份和恢復軟件列表面試
Homebrew 是一款頗負盛名的包管理工具,是 macOS 上包管理的事實 (de facto) 標準 。Homebrew 的意思是家釀啤酒。算法
它的官方 slogan 是 The missing package manager for macOS (or Linux)。Linuxbrew 已經在 Homebrew 1.9 正式合入,成爲 Homebrew 的 「一等公民」。sql
Homebrew 最先的建立者是 Max Howell,目前的主要維護者是 Mike McQuaid。同 Jekyll 等開源項目同樣,Homebrew 的核心維護者也是 GitHub 的員工。GitHub 對於員工親自參加開源項目方面,作得一直不錯。chrome
順帶插播一條奇聞逸事:Homebrew 的創始人 Max Howell 活躍在開源社區,目前主要從事 Swift 相關的庫開發。他在 2015 年初曾去 Google 面試,由於 「白板」 寫算法題「翻轉二叉樹」失敗,憤而發 tweet 諷刺:swift
Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.
對於使用 Unix/Linux 類系統的用戶每每都遇到過這些需求:
./configure
參數超多,還要解決各類庫的依賴各 Linux 發行版爲了提高安裝軟件的體驗,大多都提供了官方的包管理器,如 Ubuntu 的 aptitude (apt-get)。而蘋果官方沒有爲 macOS 提供包管理器,市面上最好的解決方案就是 Homebrew。
目前 Homebrew 的中文內容大多以簡單入門級教程爲主,對於它的各種能力提之甚少,我但願在這裏更全面的分享 Homebrew。
網上基礎的教程不少,我這裏只簡略的介紹下。對於基礎功能類的深度用法,推薦這篇 macOS 包管理工具 Homebrew 不徹底指南。
開始安裝前須要安裝 macOS 命令行工具:
xcode-select —install
或者,在 https://developer.apple.com/d... 下載安裝。
而後執行:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# 安裝 brew install wget # 完成安裝後能夠列出已安裝內容 brew list # 顯示能夠升級的包 brew outdated cmake (3.13.4) < 3.14.0 yarn (1.13.0) < 1.15.2 youtube-dl (2019.03.09) < 2019.03.18 # 進行升級 brew upgrade cmake # 刪除 brew uninstall wget # 安裝桌面程序 brew cask install google-chrome
對於 Homebrew-cask 管理桌面程序,這裏先不細說,後面會專門講。
Homebrew 會把軟件安裝到 /usr/local/Cellar
,而且經過軟鏈連接到 /usr/local/bin
。咱們能夠經過 brew unlink
和 brew link
刪除或建立連接。
Homebrew 把軟件安裝過程當中的各類名詞都進行了擬物化命名,這些命名挺有意思,但對於大多數英語水平通常的人來講,有很多詞彙有些生僻。
英文 | 直譯 | 實際含義 |
---|---|---|
formula(e) | 公式 | 安裝包的描述文件,formulae 爲複數 |
cellar | 地窖 | 安裝好後所在的目錄 |
keg | 小桶 | 具體某個包所在的目錄,keg 是 cellar 的子目錄 |
bottle | 瓶子 | 預先編譯好的包,不須要現場下載編譯源碼,速度會快不少;官方庫中的包大多都是經過 bottle 方式安裝 |
tap | (插入) 水龍頭 | 下載啓用某個源 |
cask | 木桶 | 安裝 macOS native 應用的擴展 |
bundle | 捆 | 描述 Homebrew 依賴的擴展 |
對於 Homebrew,咱們不少時候每每都是上來就 brew search
或是 brew install
。缺什麼安什麼,沒有充分的應用它的強大能力。
首先,Homebrew 雖爲解決控制檯程序而生,但它徹底有能力(Cask)安裝任何桌面軟件。它還支持豐富的分類目軟件庫或第三方庫。
除此以外,它還有一個打包安裝或備份工具,能夠把已安裝的軟件輸出成 Brewfile。遷移到新電腦時,只要根據 Brewfile 運行 Homebrew bundle,就能夠一鍵安裝所有控制檯、桌面和來自 Mac App Store 的程序(Mac App Store 上的軟件經過 mas 支持)。
Tap 在 Homebrew 中我理解是個動詞,指的是啓用某個源。實際看了下發現,homebrew-services 和 homebrew-bundle 也已 tap 形式存在,所以能夠認爲 tap 實際指的應該是擴展(extension)。
Homebrew 默認狀況下會自帶:
後二者並無任何公式配方,而只是擴展程序。
除此以外的源,須要經過 brew tap
來啓用。如:
brew tap heroku/brew brew install heroku
Homebrew-services 是 Homebrew 的後臺服務程序擴展,它基於 macOS 的 launchctl
。後臺服務類程序的安裝依舊使用 Homebrew,在管理時可使用 Homebrew-services 進行啓動、重啓和中止等操做。
brew install mysql brew services start mysql
Homebrew-cask 是 Homebrew 的 macOS Native 應用擴展,經過 cask 能夠安裝各種應用程序。
搜索 Cask 的方法和搜索普通包同樣,但安裝時須要加上 cask 指令:
brew search google-chrome brew cask install google-chrome
cask-versions
Homebrew Cask 和 Homebrew 同樣,默認庫只維護最新版本,但有的時候咱們仍是須要用舊版的(好比:我只有 Dash 3 的 License,因此須要用 Dash 3 而不是最新的 Dash 4),那就可能須要使用 cask-versions。
brew tap homebrew/cask-versions brew cask install dash3
cask-fonts
Homebrew 官方的字體源,好比 Mozilla 的開源字體 Fira Code:
brew tap homebrew/cask-fonts brew cask install font-fira-code
Homebrew 不只僅是一個包管理器,還具備軟件依賴管理能力。經過 Homebrew Bundle 能夠幫你解決全部軟件依賴,包括官方和第三方的 formula 以及 cask,甚至還包括 Mac App Store(簡稱 mas)中的應用。
Homebrew 默認就安裝了 Homebrew Bundle。
咱們只須要一個 Brewfile
,就能夠配置好全部須要的應用。熟悉 Ruby 的人應該不太須要解釋,畢竟 Ruby 本身就有 Bundler 這套東西,Brewfile 和 Gemfile 屬於對應關係。
若是你的安裝列表已經足夠 「乾淨」,那麼能夠執行 brew bundle dump
來生成現有依賴,輸出到 Brewfile
:
brew bundle dump cat Brewfile brew "git" brew "wget" brew "mas" brew "p7zip" ...
若是想本身寫也比較容易,Brewfile
是一種簡單的 Ruby DSL,寫起來比大部分配置文件都簡單。只須要掌握一些經常使用到的命令,主要有 brew
, tap
, cask
和 mas
。
這四條命令分別對應:
注:Homebrew 雖然好用,但 Homebrew 並不能管理 MAS「Mac App Store」上的應用軟件, 在終端上輕鬆管理「Mac App Store」中應用的神器 mas-cli
命令行類應用:
brew "git" brew "wget" brew "vim"
非命令行類:
cask "google-chrome" cask "alfred" cask "visual-studio-code"
非官方 Formula 應用:
tap "homebrew/cask-versions" brew "dash3" tap "homebrew/cask-fonts" cask "font-source-code-pro"
Mac App Store 上的應用:
mas "WeChat", id: 836500024
所以,維護好 Brewfile 就能夠完美解決應用自動化安裝,只須要運行:
brew bundle
建立並提交一個 Formula 比較容易,官方教程很是詳細。這裏,我就不作單獨介紹了。
Homebrew 除了各類官方維護的源外,還支持自建軟件庫。默認使用 GitHub,須要以 「homebrew-xxx」 格式命名 Repo。Formula 或 Cask 文件須要存放在 Formula 或 Casks 二級目錄中。
好比,Heroku 的自建庫在 GitHub 上是 heroku/homebrew-brew
。經過 brew tap heroku/brew
就能夠獲取庫裏維護的包了。
上面說到,Tap 默認維護在 GitHub,那麼當咱們想安裝一些須要保密的軟件時該怎麼辦呢?
答案是 Tap 支持指定 Git,所以也可使用內網域名內的 Git:
brew tap yourcompany/brew git@git.yourcompany.com: yourcompany/homebrew-brew.git brew install inhouse-app
Homebrew 自動升級觸發機率很高,因爲網絡等問題,檢查更新會好久有時會比較煩。能夠經過環境變量禁用自動升級:
HOMEBREW_NO_AUTO_UPDATE=1 brew info mysql
Homebrew 的安裝指令並不是只支持名字,也能夠用文件安裝包括網絡文件和本地文件。
# 本地 brew install blabla.rb # 遠程 brew install https://blablablabla.com/blabla.rb
Homebrew 默認狀況下只支持最新版軟件安裝,有些重要的版本會單獨存在。但想安裝一些小版本就得本身 DIY 了。
我所知有兩種方法:
brew install
安裝。/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
,git checkout
到所在 commit,再用 brew pin
鎖定這個文件的更新,而後進行安裝。我遇到的問題大多數是升級macOS Mojave以後產生的,升級前要三思然後行,先備份,先備份,先備份
Homebrew Permissions Denied Issues Solution
sudo chown -R $(whoami) $(brew --prefix)/*
Reference - https://gist.github.com/iraza...
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun.
Reference - https://apple.stackexchange.c...
# The problem is that you are using XCode and you explicit have to agree to the license agreement. So open Terminal, and run the following: xcode-select --install # This will download and install xcode developer tools and fix the problem. As a follow on step, you may need to reset the path to Xcode if you have several versions or want the command line tools to run without Xcode. xcode-select --switch /Applications/Xcode.app xcode-select --switch /Library/Developer/CommandLineTools
Homebrew國內加速鏡像
加速一切 - 配置國內鏡像 - Linux apt/macOS brew/Docker/Python Conda/Maven
https://github.com/Linuxbrew/brew/issues/612
Formula Cookbook — Homebrew Documentation
Formula Cookbook — Homebrew Documentation