Linux which命令標識在向shell發出命令時啟動的可執行二進位制檔案。如果您的計算機上有同一程式的不同版本,您可以使用哪個來確定shell將使用哪個版本。
當您試圖從終端視窗執行程式或命令時,shell(通常是現代發行版上的Bash)必須找到該命令並啟動它。有些命令(如cd、history和pwd)是內建在shell中的,因此Bash不必費勁地查詢這些命令。
但是Bash如何定位其他命令、程式和外部獨立二進位制檔案呢?Bash使用路徑,實際上是一組路徑,每個路徑指向一個目錄。然後,它在每個目錄中搜索與您試圖執行的命令或程式匹配的可執行檔案。當它找到一個時,Bash啟動它並放棄搜尋。
可以使用echo檢查$PATH環境變數並檢視路徑中的目錄。為此,請鍵入以下內容,然後按Enter鍵:
echo $PATH輸出列表用冒號(:)分隔每條路徑。在我們使用的計算機上,Bash將按以下順序搜尋以下目錄:
檔案系統中有許多名為/**in和/bin的資料夾,這可能會導致一些混亂。
假設我們有一個名為htg的程式的更新版本。它位於當前目錄中,我們可以透過鍵入以下命令來執行它:
/htg公司
它不是什麼程式,只是列印版本號,然後關閉。新版本是1.2.138。
要在當前工作目錄中執行程式,必須在程式名前面鍵入“./”,以便Bash知道在哪裡可以找到它。
因為我們想從任何目錄執行這個特定的程式,所以我們要將可執行檔案移到/usr/bin目錄中。Bash將在路徑中找到該程式併為我們執行它。
我們不需要當前目錄中的可執行檔案,也不需要在程式名前鍵入“./”,如下所示:
sudo mv htg /usr/bin現在,讓我們透過鍵入以下命令來執行程式:
htg有些東西在執行,但它不是我們新的更新程式。相反,它是舊版本1.2.105。
我們上面演示的問題是為什麼要設計which命令。
在本例中,我們將使用which並將正在調查的程式的名稱作為命令列引數傳遞:
which htg報告在/usr/local/bin目錄中找到了htg的一個版本。因為該位置出現在我們將更新的htg移動到的目錄之前的路徑中,Bash使用該程式的早期版本。
但是,如果使用如下所示的-a(all)選項,即使找到匹配項也會繼續搜尋:
which -a htg然後列出路徑中任何目錄中的所有匹配項。
所以,這就是問題所在,這個程式的早期版本在一個目錄中,這個目錄也在補丁中。在我們刪除新版本程式的目錄之前,這個目錄正在被搜尋。
為了驗證,我們可以鍵入以下內容並顯式執行每個版本的程式:
/usr/local/bin/htg /usr/bin/htg這就解釋了問題所在,解決方法很簡單。
實際上,我們有選擇。我們可以刪除/use/local/bin目錄中的舊版本,也可以將其從/usr/bin移到/usr/local/bin。
兩個結果並不一定意味著兩個二進位制檔案。
讓我們看一個示例,在該示例中,我們將使用which命令和-a(all)選項,並查詢less程式的版本:
which -a less哪兩個地方有less程式的版本,但這是真的嗎?在一臺Linux計算機上安裝兩個不同版本(或者在多個位置安裝同一版本)的less是很奇怪的。所以,我們不接受它的輸出。相反,讓我們更深入一點。
我們可以使用ls、-l(長列表)和-h(人類可讀)選項來檢視發生了什麼:
ls -lh /usr/bin/less檔案大小報告為9個位元組!這絕對不是less的完整副本。
列表的第一個字元是“l”。普通檔案的第一個字元是連字元(-)。“l”是一個符號,表示符號連線。如果忽略了該細節,則-->;符號還表示這是一個符號連結,可以將其視為一種快捷方式。這個指向less in/bin的副本。
讓我們用less in/bin的版本再試一次:
ls -lh /bin/less這個條目顯然是一個“真正的”二進位制可執行檔案。清單的第一個字元是連字元(-),這意味著它是一個常規檔案,檔案大小為167KB。因此,只安裝了less的一個副本,但是有一個從另一個目錄指向它的符號連結,Bash在搜尋路徑時也會找到這個連結。
相關:如何使用ls命令列出Linux上的檔案和目錄
你可以傳遞多個程式和命令給它,它會按順序檢查它們。
例如,如果鍵入:
which ping cat uptime date head它透過提供給它的程式和命令列表工作,並列出每個程式和命令的結果。
如果您有這種傾向,您也可以透過鍵入以下內容來使用它本身:
which which除了出於好奇而瀏覽Linux檔案系統之外,當您期望從一個命令或程式獲得一組行為時,這是最有用的。
在這些情況下,您可以使用哪個來驗證Bash正在啟動的命令是您想要使用的命令。
... 如何在windows10上安裝linux bash shell ...
要在Linux中重新命名檔案嗎?如果您知道如何在Windows、macOS或Chrome作業系統中完成這項工作,那麼您就知道如何在這裡完成這項工作。在大多數版本的Linux上,您只需右鍵單擊一個檔案並選擇Rename選項。 ...
雖然您可能已經知道如何使用GUI檔案瀏覽器在Linux中移動檔案,但您可能想知道終端中是否有move命令允許您將檔案快速移動到不同的目錄。mv命令就是您想要的命令,它的簡單語法和一些可選的安全標誌很容易使用。 ...
...您可能還想將自己喜歡的程式新增到啟動過程中。下面是如何控制Ubuntu在登入時啟動什麼。 我們在Ubuntu20.04 LTS上用預設的GNOME桌面運行了這個過程。這些步驟在其他帶有GNOME桌面的Linux發行版上是類似的,但是您可能需要在其他...
Bash不是唯一的Linux shell。很容易嘗試其他的shell,比如非常流行的Zsh。找到一個您喜歡的shell後,使用chsh命令將其設定為預設shell。我們會教你怎麼做。 為什麼貝殼很重要 shell位於您和作業系統之間。它在終端視窗內提供環境...
...但這並沒有什麼不好的地方。我們將解釋它的作用,以及如何調整它。 什麼是$path,它是如何工作的($path on linux, and how does it work)? 當您在終端視窗中鍵入一個命令並按Enter鍵時,您甚至在執行命令之前就開始了大量的活動。 B...
...管是什麼原因,如果你被迫或只是喜歡使用手指,這裡是如何安裝和使用它。 相關:如何在Linux上使用pinky命令 安裝手指 您可以使用以下命令在Ubuntu上安裝finger: sudo apt-get install finger 要在Fedora上安裝finger,請使用以下命令:...
...Linux檔案許可權,乍看起來很複雜,但一旦你知道它們是如何工作的,實際上就相當簡單了。 chmod修改檔案許可權 在Linux中,誰可以對檔案或目錄做什麼是透過許可權集來控制的。有三組許可權。一組用於檔案所有者,另一組...
想知道一個程序運行了多長時間以及更多嗎?Linux time命令返回時間統計資訊,讓您對程式所使用的資源有更深入的瞭解。 時間有很多親戚 有許多Linux發行版和不同的類Unix作業系統。每一個都有一個預設的命令shell。現代Linux發...
...果您需要將訊息快速傳送給已登入計算機的使用者,您該如何做?電子郵件不符合要求。你不知道郵件什麼時候會被閱讀。如果你現在想讓人們知道一些事情,那就沒用了。無論如何,你不想阻塞那些不需要檢視訊息的已登出使...