【翻譯】PATH究竟是什么?


最近,我試圖向一個朋友解釋他電腦上PATH變量是用來做什么的。我在我們所交流的平台‘the Slack group"寫了一篇比較長的消息之后,我意識到這個主題可以寫成一個很好的博客,所以開始吧!

你大概一直聽人說或者在博客上談論修改你的PATH或者這樣那樣的。這時候你就會說:“等下,究竟什么是PATH?”。這是一個好問題!

PATH變量說白了就是一個目錄列表,你的電腦查找這些目錄列表來找到被請求的可執行文件

 

如果這個定義不能解釋明白,請繼續看下去,我會深入地解釋它是怎么工作的。

簡單地介紹文件系統

你的電腦是由文件組成的,這些文件有兩種類型:一種是數據文件(只是包含信息的文件),一種是可執行文件(被用來在你電腦上執行各種功能和操作)。

無論什么時候,只要你打開一個電腦應用,從本質上講就是在運行它的可執行文件。你在終端運行的命令也是一樣的,例如,cd和ls只是可執行文件。這些可執行文件通常被存儲在某些特定的目錄里。你的應用軟件的可執行文件,例如,被存儲在Applications文件夾里。你所有的CLI(Command Line Interface)程序/命令的可執行文件通常被存儲在以下幾個地方的其中之一:

  1. /bin -> 使用者的應用程序-包含一些常用的可執行文件,被用來導航到目錄和通過命令行來管理文件


  2. /sbin->系統程序和管理員應用程序-包含處理一些像booting\restoring\recovering或者repairingt系統(launchdrebootmount, etc)的可執行文件
  3. /usr/bin
  4. /usr/sbin
  5. /usr/local/bin,  /usr/local/sbin 

    除此之外,還有一些標准目錄,一些程序用它們自己的/bin之類的目錄來存儲可執行文件,例如,Homebrew是一個受歡迎的macOS包管理器,它把可執行文件安裝在/usr/local/Cellar中,這些可執行文件然后被軟鏈到/usr/local/bin文件夾。





關於PATH 

我們在終端打出文件的絕對路徑就能找到並使用這些可執行文件,所以,舉個例子,如果你想使用ls來列出當前目錄的所有的文件,你可能會在你的終端運行/bin/ls,或者你有一個很贊的程序安裝在/usr/local/bin,你可能會運行/usr/local/bin/my-program來使用它。但是你真的想每次打出你的可執行文件的全路徑嗎?難道你不寧願能運行ls或者my-program?


這就是PATH存在的意義,這里有一個比喻,來描述PATH是如何工作的:想像你是一個幾個大的倉庫的管理員,每一個倉庫里有很多不同的產品。你也有電子表格或者列出每一個倉庫地址的地圖和每一個倉庫里面都存在什么樣的產品。

PATH用了類似的方式工作,它是一個全局變量,包含了用一個冒號( :)來隔開的不同路徑的字符串。當你沒有用全局路徑,只打出了程序的名字,然后你的電腦會使用PATH變量來知道它應該去哪些目錄里面去查找你正在請求的那個可執行文件。從列表的第一個目錄開始,它將找到一個與你請求匹配的,這意味着PATH中第一個目錄比它之后的目錄優先查找。


 

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin


這是macOS默認的PATH,但是假如你想使用其他的工具類似Homebrew,你想把其他的目錄加入到你的PATH呢?

編輯你的PATH
既然PATH本質上只是一個變量,我們可以用命令行得到PATH或者用一個腳本$PATH或者${PATH}.  ${PATH}的形式尤其有用,當你想重構像echo ${PATH}foo, 因為運行echo $PATHfoo將嘗試去找PATHfoo

例如,我們想添加一個目錄優先於其他當前的目錄,我們可以在我們的終端運行以下的命令:

export PATH="/my/directory/bin:$PATH"

現在當我們運行echo $PATH ,你會看到PATH里剛加的新目錄被列在其他的目錄之前:

/my/directory/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

或者你想把這個目錄加在PATH最后:

export PATH="$PATH:/my/directory/bin"

那你的PATH將會看起來是這樣子:

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/my/directory/bin

到這里,你已經知道怎么成功修改你的PATH了。
然而,你剛剛對PATH的修改不會是一直存在的,換句話說,下次你退出mac,PATH將會回到默認的PATH值。我們想永久的改變PATH,有兩種方法:

  1. 修改/etc/paths文件
  2. 向我們本地shell文件中添加定制的PATH聲明

如果我們編輯/etc/paths文件,PATH的改變將被全局應用到系統上所有的用戶。

你只需要在該文件中另起一行來添加你目錄路徑即可。如果你只要改變當前用戶的PATH,那么我推薦你采用第二種方法:

如果你使用的是Bash(大部分UNIX系統默認的shell),你將修改~/.bash_profile或者~/.bashrc;

PATH=$PATH:/usr/local/mysql/bin

export MONGO_PATH=/usr/local/Cellar/mongodb

export PATH=$PATH:$MONGO_PATH/bin

你用的其他的shell,你可以添加它到你所在用到shell文件。

 

 

 

 


免責聲明!

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



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