Homebrew安裝Packages是否需要另外設置環境變量PATH?


轉載自:https://www.jianshu.com/p/529b7558a6e0

Homebrew是mac os平台最受歡迎的包管理工具,它會自動管理下載依賴,可以給使用者節省大量時間。可是你了解它是如何管理package的環境變量PATH的嗎?你是否一直在重復的配置PATH?讀完本文,你將找到答案。

Homebrew二進制文件安裝路徑

Homebrew的命令二進制文件brew安裝路徑是usr/local/bin

根據官方常見問題說明文檔,通過homebrew安裝的包文件(package)一般都位於/usr/local/Cellar文件夾下。比如我安裝的mongodb路徑為/usr/local/Cellar/mongodb/3.2.7,對應的bin路徑為/usr/local/Cellar/mongodb/3.2.7/bin。

符號鏈接(symbolic link)

在計算機中,符號鏈接也叫做symlink或者軟鏈接,是一種特殊的文件,相當於是給一個文件或文件夾的路徑起了一個外號(昵稱,別名),實現符號鏈接的命令是:

$ ln -s target_path link_path

target_path是我們要起外號的對象(路徑,path),link_path就是外號(一般也是一個path)了。

有2種方法可以看到符號鏈接所指向的真正路徑,比如要查看/usr/local/bin/mongod這個符號鏈接:

方法1是使用命令:

ls -l /usr/local/bin/mongod

終端輸出信息如下:


lrwxr-xr-x 1 chenxin admin 34 6 13 10:13 /usr/local/bin/mongod -> ../Cellar/mongodb/3.2.7/bin/mongod

可以看到,/usr/local/bin/mongod這個符號鏈接實際指向了/usr/local/Cellar/mongodb/3.2.7/bin/mongod.

方法2是使用Finder,對mongod符號鏈接文件使用顯示簡介:

image

從圖片中可以很容易看出,mac osx把這種文件類型(種類)歸類為替身,看來符號鏈接又多了一個名字了啊!原身指向/usr/local/Cellar/mongodb/3.2.7/bin/mongod。

對符號鏈接文件進行讀寫的操作會表現為直接對目標文件進行讀寫,刪除符號鏈接不影響目標文件,但是刪除目標文件會導致符號鏈接指向一個不存在的對象。這有點像C語言里的指針,銷毀指針不影響指針所指內存地址,但是如果內存地址被系統回收,會導致指針變成野指針。對於符號鏈接來說,這種情況叫做被遺棄。

Homebrew自動為安裝的bin創建符號鏈接

有了以上關於符號鏈接的了解,接下來說說homebrew是如何為安裝的package對應的bin創建符號鏈接。還是以homebrew安裝mongodb舉例,安裝的原始bin位於/usr/local/Cellar/mongodb/3.2.7/bin,從finder進入該路徑,可以看到mongodb各個命令對應的命令行二進制文件:

image

再打開/usr/local/bin,可以看到以下文件:

image

很明顯,可以看到mongodb各個命令都有對應的以命令的字面符號命名的文件,這些就是符號鏈接。如果打開/usr/local/bin/mongod這個符號鏈接文件,其實是被符號鏈接到了/usr/local/Cellar/mongodb/3.2.7/bin/mongod,接着自然就是執行mongod命令了。

不需要再添加環境變量PATH

網絡上很多教程都說應該再添加環境變量,其實完全是多此一舉。舉個例子,我安裝mongodb3.2.7版本,按照網上很多教程我是需要把這個路徑添加到PATH變量中,即需要在~/.bash_profile中添加下面一行:

export PATH=/usr/local/Cellar/mongodb/3.2.7/bin:${PATH}}

通過Homebrew安裝的package為什么不需要再添加bin的PATH環境變量?

通過上一節我們知道,homebrew會給package的bin里的所有命令創建對應的符號鏈接保存到usr/local/bin目錄下,只要usr/local/bin在PATH中,就不需要再添加環境變量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM