Linux which 指令
Linux which
指令是用來查找可執行的指令的檔案位置,像是 node、npm 等等。
which
的查找範圍是 PATH
環境變數中定義的檔案目錄底下
什麼是 PATH 環境變數
在 Linux 系統中,PATH
是環境變數,用來告訴 shell 或其他程序該在哪個目錄底下搜尋可執行的檔案。
若有多個目錄則會以 :
分隔,目錄路徑為絕對路徑。
可用 echo
指令查看 PATH
為多少:
echo $PATH
輸出:
/usr/local/sbin:/Users/username/.nvm/versions/node/v10.21.0/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
所以當我們執行 node -v
要查看目前 node 版本時,終端機就會在 PATH
中定義的目錄底下找 node 的執行檔。
我們也可以自己寫可執行的檔案並放在固定路徑,將該固定路徑也新增至
PATH
中,假設檔案名稱為 cc (custom command),即可在終端機中下指令cc complete homework
!
使用 which 指令
which
指令語法如下:
which [OPTIONS] NAME...
假設要找目前 Node 的執行檔案在哪:
which node
輸出:
/Users/username/.nvm/versions/node/v10.21.0/bin/node
可給多個參數,會依序列出:
which node npm yarn touch
輸出:
/Users/username/.nvm/versions/node/v10.21.0/bin/node
/Users/username/.nvm/versions/node/v10.21.0/bin/npm
/Users/username/.nvm/versions/node/v10.21.0/bin/yarn
/usr/bin/touch
預設只會輸出第一個找到的檔案路徑,若要列出所有符合的檔案路徑則需要加 -a
:
which -a npm
輸出:
/Users/username/.nvm/versions/node/v10.21.0/bin/npm
/usr/local/bin/npm
像上述查找 npm 卻有多個檔案路徑輸出,假設是非 node 底下的 npm 檔案排在第一個的話,很容易發生執行 npm 時與 node 版本不相容的問題。 建議在安裝時皆統一使用 nvm 切換 node 環境,在該 node 環境下安裝。
總結
which
是很方便的指令,用來排查目前執行環境中各指令是使用哪邊的執行檔,也能看自己以前亂裝了各種不同版本的檔案。