Homebrew總結

homebrew

HomeBrew就是MacOS下最著名的包管理器,我使用它的目的就是讓MacOS下的命令行和Linux下一樣順手。

安裝

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

上面這句話的意思是使用curl命令行下載安裝腳步install,然后用ruby解析執行這個安裝腳步。

安裝好之后

echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bash_profile

后面的.bash_profile請根據你使用shell的情況來修改。

現在homebrew的最新版本是1.0.0。

使用以下命令查看版本。

brew -v

基本操作

安裝一個包

brew install <formula>

但是麻煩的是你往往不記得包名或者記不全,這里有兩個方法,第一個是使用brew search進行搜索,比如你想找vim這個包,但你只記得了前面兩個字母,最后一個m給忘記了,這時候你可以嘗試下面但命令:

brew search vi

結果出來了,但是結果太多了,包括了很多不是vi開頭的包,這個時候你就得用正則表達式來搜索,這對小白來說也是非常痛苦的,因為要學會正則表達式也得看一本書,但是一旦你熟悉它之后,你會發現你會在每個搜索的場景下都希望它支持正則表達式的搜索,正如你熟悉了編輯器vim之后,希望處處都是vim模式一樣。

brew search /正則表達式/ # 標準格式
brew search /^vi/   #規定了只能是vi開頭
brew search /^vi\\w$/   #規定只能是vi開頭并且只有三個字母

第二種方法更適合小白用戶,前提是你安裝了oh-my-zsh,使用過oh-my-zsh的用戶都知道其補全功能非常牛逼,它可以補全命令,命令的選項和參數,還可以補全包管理器的包名,是不是很厲害,但是默認oh-my-zsh是不支持HomeBrew的,所以我們需要這樣做:

brew install zsh-completions

使用homebrew安裝原本需要圖形安裝的軟件比如chrome。

brew cask install <formula>

一般來說不帶任何選項的話,homebrew會優先下載二進制,二進制下載不到就會嘗試從源碼編譯,這也是homebrew強大的地方之處。

比如,我們希望更新最新的vim,這就得從源碼編譯了,從源碼編譯過vim的人都知道,有很多選項要用戶決定,然后homebrew是如何做到的呢,我們該如何指定選項呢?

brew info <formula>  #查看這個包的信息,從中我們可以得知有哪些選項可選。

#示例
brew install vim --HEAD --with-override-system-vi --with-lua

然后,homebrew就會幫我們解決編譯過程中的任何依賴了,是不是很爽?

細心的人可能也注意到了,并沒有找到所有在vim源碼makefile中的提供的選項,這是因為支持什么選項取決于該包對應的formula文件,通常位于/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula文件夾中,你可以使用下面的命令來編輯它,該文件遵循ruby語法:

brew edit <package_name>

卸載與跟新

# 卸載對應包名字
brew uninstall <package_name>
# 列出過時的包
brew outdated
# 更新過時的包,不帶包名就跟新所有包
brew upgrade [ package_name ]
# 跟新HomeBrew自身
 brew update
# 清除緩存
brew cleanup [包名]
# 列出已經安裝的包
brew list

如果該包有多個版本,那么先使用brew switch <包名> <版本號>來切換到該版本然后再使用uninstall來卸載,如果卸載全部版本那么使用--force選項。

擴展

就像ubuntu的ppa一樣,很多時候有些軟件包并不在官方提供列表里面而是由第三方提供的這個時候,我們就需要使用下面的命令:

brew [un]tap <github_userid/repo_name> #添加或者刪除倉庫

注意repo_name只是實際倉庫名的一部分,而實際倉庫名的前綴必須是homebrew-。比如

brew tap neovim/neovim
# 這樣實際倉庫名就是homebrew-neovim

官方文檔中提出brew tap作用用于添加更多倉庫,默認情況下tap假設這些倉庫來源于github,但又不局限于它。

不帶參數的話,將會列出當前已經tapped的倉庫,比如:

brew tap
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
No changes to formulae.

caskroom/cask
homebrew/core
homebrew/dupes
neovim/neovim

總共列出了四個倉庫,其中前面三個是默認自帶的。

如果你要增加的倉庫已經存在于homebrew/core中了(名字一樣),你必須顯性的安裝:

brew install vim                     # installs from homebrew/core
brew install username/repo/vim       # installs from your custom repo

更換源

由于各種原因,用homebrew跟新下載軟件有時非常慢,這個時候你可以嘗試更換源,這個概念和其它包管理器的概念是一致的,也就是換個軟件服務器。

有兩個源,第一個是homebrew自身程序公式的服務器地址,homebrew是托管于github,如果你訪問這個網站沒有問題,那就不需要換了,要換也非常簡單,相當于給你的git倉庫換一個遠程地址,而homebrew的倉庫位置默認位于/usr/local/Homebrew下(這個位置是homebrew 1.0之后才變的)。

cd /usr/local/Homebrew
git remote set-url origin http://mirrors.ustc.edu.cn/homebrew.git

cd ~
mkdir tmp
cd tmp
git clone http://mirrors.ustc.edu.cn/homebrew.git
 
cp -R homebrew/.git /usr/local/Homebrew
cp -R homebrew/Library /usr/local/Homebrew

第二個源就是二進制的服務器地址,做法很簡單就是

echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zshrc
source ~/.zshrc

Homebrew中一些路徑的解釋

Homebrew 1.0的基礎上,

Caskroom  Frameworks  bin  include  opt   share
Cellar    Homebrew    etc  lib      sbin  var
  • Cellar:文件夾存放的是所有包安裝所在路徑,包括二進制,文檔和配置文件,按照這樣Cellar/包名/版本號/的形式來安放。

  • opt:由于版本號隨著跟新而改變的,所以需要一個固定不變的路徑作為我們訪問二進制和文檔的路徑,這就是opt的作用。

  • Homebrew:brew程序所在路徑.

  • bin:所有包安裝之后二進制都會鏈接到這個路徑下

  • share:所有包安裝之后的文檔都會鏈接到這個路徑下

  • etc:同上,所有包的配置文件

  • lib:同上,所有包相關庫文件

  • Caskroom:app文件

MacOS下gnu命令行

MacOS下的命令行是bsd的,而且好久沒跟新,各種不順手,所以這一小節的目的是介紹通過homebrew安裝gnu的命令行工具代替系統自帶的命令行。

# GNU File, Shell, and Text utilities
brew info coreutils
brew install coreutils

從第一條命令得知,安裝之后,所有命令都是帶有g前綴的,這會讓我們非常不爽,所以如果你希望使用它們原來的名字的話,就將這個路徑加到PATH變量的最前頭。

PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" #這句話放到你shell配置文件中
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH" #默認使用他們的manpage

可以看出還是比較麻煩的,而且有些包像binutils并沒有提供這樣的鏈接,但是卻有g前綴。

下面這些軟件也是我們常用的,

brew install binutils
brew install ed --with-default-names
brew install findutils --with-default-names
brew install gawk
brew install curl --with-libidn --with-libssh2 --with-nghttp2 --with-rtmpdump
brew install gnu-indent --with-default-names
brew install gnu-sed --with-default-names
brew install gnu-tar --with-default-names
brew install gnu-which --with-default-names
brew install gnutls
brew install grep --with-default-names
brew install gzip
brew install screen
brew install watch
brew install wdiff --with-gettext
brew install wget
brew install bash zsh
brew install gdb  # gdb requires further actions to make it work. See `brew info gdb`.
brew install gpatch
brew install m4
brew install make
brew install nano
brew install rsync
brew install svn
brew install unzip
brew install aria2
brew install git 
brew install ffmpeg
brew install ctags cscope the_silver_searcher
brew install vim --HEAD --with-override-system-vi --with-lua
brew install neovim --HEAD --with-release
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容