$PATH是Linux計算機後臺的靜默操縱器之一。它會悄悄地影響你的使用者體驗,但這並沒有什麼不好的地方。我們將解釋它的作用,以及如何調整它。
當您在終端視窗中鍵入一個命令並按Enter鍵時,您甚至在執行命令之前就開始了大量的活動。
Bash是大多數Linux發行版的預設shell。它解釋您輸入的文字行,並標識與引數、管道、重定向和其他內容混合的命令名。然後,它會找到這些命令的可執行二進位制檔案,並使用您提供的引數啟動它們。
shell定位可執行檔案的第一步是確定是否包含二進位制檔案。如果您使用的命令位於shell本身(“shell內建”)中,則無需進一步搜尋。
Shell內建是最容易找到的,因為它們是Shell的一部分。就像把它們放在工具帶裡,它們總是和你在一起。
如果你需要其他工具,你必須在車間裡翻找才能找到它。它是在你的工作臺上還是掛在牆上?$PATH環境變數就是這樣做的。它包含shell搜尋的位置列表以及搜尋順序。
如果要檢視命令是shell內建、別名、函式還是獨立二進位制mv/work/unfile,可以使用type命令,如下所示:
type clear type cd這告訴我們clear是一個二進位制檔案,在路徑中找到的第一個檔案位於/usr/bin。您的計算機上可能安裝了多個版本的clear,但shell將嘗試使用這個版本。
不出所料,cd是一個內建的shell。
很容易看出你的道路上有什麼。只需鍵入以下內容即可使用echo命令並列印$PATH變數中的值:
echo $PATH輸出是以冒號(:)分隔的檔案系統位置列表。shell從左到右搜尋路徑,檢查每個檔案系統位置是否有匹配的可執行檔案來執行命令。
我們可以在列表中選擇要搜尋的檔案系統位置,以及它們的搜尋順序:
可能不是很明顯的一點是,搜尋沒有在當前工作目錄中啟動。相反,它透過列出的目錄工作,並且只通過列出的目錄。
如果當前工作目錄不在您的路徑中,則不會對其進行搜尋。另外,如果命令儲存在不在路徑中的目錄中,shell將找不到它們。
為了演示這一點,我們建立了一個名為rf的小程式。執行時,rf列印在終端視窗中啟動該目錄的名稱。它位於/usr/local/bin中。我們在/dave/work目錄中也有一個新版本。
我們鍵入以下命令來顯示shell將查詢和使用的程式版本:
which rfshell報告它找到的版本是路徑中目錄中的版本。
我們鍵入以下命令來啟動它:
rf版本1.0的射頻執行和確認我們的期望是正確的。找到並執行的版本位於/usr/local/bin中。
要在此計算機上執行任何其他版本的rf,我們必須使用命令列上可執行檔案的路徑,如下所示:
./work/rf現在我們已經告訴shell在哪裡可以找到我們想要執行的rf版本,它使用的是版本1.1。如果我們喜歡這個版本,我們可以將它複製到/usr/local/bin目錄並覆蓋舊的。
假設我們正在開發rf的新版本。在開發和測試它時,我們需要經常執行它,但我們不想將未釋出的開發構建複製到實時環境中。
或者,也許我們已經下載了一個新版本的rf,並想在它公開之前做一些驗證測試。
如果我們將工作目錄新增到路徑中,我們會使shell找到我們的版本。而這個改變只會影響我們其他人仍然會使用rf-in/usr/local/bin版本。
您可以使用export命令將目錄新增到$PATH。然後,該目錄將包含在shell搜尋的檔案系統位置列表中。當shell找到匹配的可執行檔案時,它將停止搜尋,因此您需要確保它首先搜尋您的目錄,在/usr/local/bin之前。
這很容易做到。對於我們的示例,我們鍵入以下內容將目錄新增到路徑的開頭,以便它是第一個搜尋的位置:
export PATH=/home/dave/work:$PATH此命令將$PATH設定為等於我們正在新增的目錄,/home/dave/work,然後設定整個當前路徑。
第一條路徑沒有美元符號($)。我們設定路徑的值。最後的$PATH有一個美元符號,因為我們引用的是PATH變數中儲存的內容。另外,請注意新目錄和$PATH變數名之間的冒號(:)。
讓我們看看現在的路徑是什麼樣子:
echo $PATH我們的/home/dave/work目錄被新增到路徑的開頭。我們提供的冒號將它與路徑的其餘部分分開。
我們鍵入以下內容以驗證我們的rf版本是第一個找到的版本:
which rf布丁中的證明是執行rf,如下所示:
rfshell找到版本1.1並從/home/dave/work執行它。
要將目錄新增到路徑的末尾,只需將其移動到命令的末尾,如下所示:
export PATH=$PATH:/home/dave/work正如Beth Brooke Marciniak所說,“成功是美好的,但成功是轉瞬即逝的。”當你關閉終端視窗的那一刻,你對$PATH所做的任何更改都消失了。要使它們永久化,必須將export命令放在配置檔案中。
在.bashrc檔案中放入export命令時,每次開啟終端視窗時,它都會設定路徑。與SSH會話不同,SSH會話需要登入,它們被稱為“互動式”會話。
過去,您會將export命令放在.profile檔案中,以設定登入終端會話的路徑。
但是,我們發現,如果我們將export命令放在.bashrc或.profile檔案中,它就可以正確地設定互動和登入終端會話的路徑。你的經歷可能不同。為了處理所有可能發生的情況,我們將向您展示如何在這兩個檔案中執行此操作。
在/home目錄中使用以下命令編輯.bashrc檔案:
gedit .bashrcgedit編輯器開啟並載入.bashrc檔案。
滾動到檔案底部,然後新增前面使用的以下匯出命令:
export PATH=/home/dave/work:$PATH儲存檔案。接下來,關閉並重新開啟終端視窗,或者使用dot命令讀取.bashrc檔案,如下所示:
. .巴什爾
然後,鍵入以下echo命令以檢查路徑:
echo $PATH這會將/home/dave/work目錄新增到路徑的開頭。
將命令新增到.profile檔案的過程是相同的。鍵入以下命令:
gedit .profilegedit編輯器啟動時載入了.profile檔案。
將export命令新增到檔案的底部,然後儲存它。關閉和開啟新的終端視窗不足以強制重新讀取.profile檔案。要使新設定生效,必須登出和返回或使用dot命令,如下所示:
. .profile相關:如何使用gedit在Linux上以圖形方式編輯文字檔案
要為使用系統的每個人設定路徑,可以編輯/etc/profile檔案。
您需要使用sudo,如下所示:
sudo gedit /etc/profile當gedit編輯器啟動時,將export命令新增到檔案的底部。
儲存並關閉檔案。這些更改將在其他人下次登入時對其生效。
確保不要意外地在路徑中新增一個前導冒號“:”,如下所示。
如果您這樣做,這將首先搜尋當前目錄,這將帶來安全風險。假設您下載了一個存檔檔案並將其解壓縮到目錄中。您可以檢視這些檔案,然後看到另一個壓縮檔案。您再次呼叫解壓縮以提取該存檔。
如果第一個存檔包含一個名為unzip的可執行檔案,它是一個惡意的可執行檔案,那麼您可能會意外地觸發該檔案,而不是真正的unzip可執行檔案。這是因為shell將首先檢視當前目錄。
因此,鍵入匯出命令時一定要小心。使用echo$PATH檢查它們並確保它們是您想要的方式。
... 今天我們將介紹如何在Windows、Mac和Linux上將命令的輸出傳送到bashshell中的文字檔案。 ...
...也是免費的。不僅如此,你還可以自由地看看這些程式是如何**的。如果您有專業知識,您可以使用此程式碼建立自己的軟體。 ...
... 但不一定要這樣。是時候學習如何只使用別名透過SSH高效登入、傳輸單個檔案或目錄、執行遠端SSH命令以及輕鬆地將遠端伺服器裝載到本地目錄了。 ...
...改其目錄,您可以控制他們可以訪問哪些命令。下面介紹如何在Linux上設定受限shell。 受限炮彈 受限shell不是另一個shell。這是標準外殼的另一種模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下啟動。在本文中,我們將...
...獲和資料包分析,Brim將徹底改變你的工作流程。 相關:如何在Linux上使用Wireshark過濾器 安裝邊緣 Brim非常新,所以它還沒有進入Linux發行版的軟體庫。不過,在Brim下載頁面上,您會找到DEB和RPM包檔案,因此在Ubuntu或Fedora上安裝...
...加密了資料,並使與其他人共享檔案變得容易。下面介紹如何使用PowerShell壓縮和解壓檔案。 如何使用powershell壓縮檔案 讓我們首先使用Compress-archive cmdlet將一些檔案壓縮到ZIP檔案存檔中。它獲取要壓縮的任何檔案的路徑。多個...
...小又簡單。 在使用Linux計算機的第一個小時內,您將學習如何使用Bash和其他shell附帶的cd命令。也許您以前有在其他作業系統上使用它的經驗,不需要解釋。它會改變當前的工作目錄,對嗎?還有什麼要知道的? 好吧,比你想象...
...在shell中的,因此Bash不必費勁地查詢這些命令。 但是Bash如何定位其他命令、程式和外部獨立二進位制檔案呢?Bash使用路徑,實際上是一組路徑,每個路徑指向一個目錄。然後,它在每個目錄中搜索與您試圖執行的命令或程式匹...