linux下如何使用which命令

Linux which命令標識在向shell發出命令時啟動的可執行二進位制檔案。如果您的計算機上有同一程式的不同版本,您可以使用哪個來確定shell將使用哪個版本。...

Linux which命令標識在向shell發出命令時啟動的可執行二進位制檔案。如果您的計算機上有同一程式的不同版本,您可以使用哪個來確定shell將使用哪個版本。

二進位制檔案和路徑

當您試圖從終端視窗執行程式或命令時,shell(通常是現代發行版上的Bash)必須找到該命令並啟動它。有些命令(如cd、history和pwd)是內建在shell中的,因此Bash不必費勁地查詢這些命令。

但是Bash如何定位其他命令、程式和外部獨立二進位制檔案呢?Bash使用路徑,實際上是一組路徑,每個路徑指向一個目錄。然後,它在每個目錄中搜索與您試圖執行的命令或程式匹配的可執行檔案。當它找到一個時,Bash啟動它並放棄搜尋。

可以使用echo檢查$PATH環境變數並檢視路徑中的目錄。為此,請鍵入以下內容,然後按Enter鍵:

echo $PATH

linux下如何使用which命令

輸出列表用冒號(:)分隔每條路徑。在我們使用的計算機上,Bash將按以下順序搜尋以下目錄:

  • /usr/本地/**in
  • /usr/本地/bin
  • /usr/**in公司
  • /usr/箱
  • /斯賓
  • /垃圾箱
  • /使用者/遊戲
  • /usr/本地/遊戲
  • /快照/bin

檔案系統中有許多名為/**in和/bin的資料夾,這可能會導致一些混亂。

小心那些路

假設我們有一個名為htg的程式的更新版本。它位於當前目錄中,我們可以透過鍵入以下命令來執行它:

/htg公司

linux下如何使用which命令

它不是什麼程式,只是列印版本號,然後關閉。新版本是1.2.138。

要在當前工作目錄中執行程式,必須在程式名前面鍵入“./”,以便Bash知道在哪裡可以找到它。

因為我們想從任何目錄執行這個特定的程式,所以我們要將可執行檔案移到/usr/bin目錄中。Bash將在路徑中找到該程式併為我們執行它。

我們不需要當前目錄中的可執行檔案,也不需要在程式名前鍵入“./”,如下所示:

sudo mv htg /usr/bin

linux下如何使用which命令

現在,讓我們透過鍵入以下命令來執行程式:

htg

linux下如何使用which命令

有些東西在執行,但它不是我們新的更新程式。相反,它是舊版本1.2.105。

which命令

我們上面演示的問題是為什麼要設計which命令。

在本例中,我們將使用which並將正在調查的程式的名稱作為命令列引數傳遞:

which htg

linux下如何使用which命令

報告在/usr/local/bin目錄中找到了htg的一個版本。因為該位置出現在我們將更新的htg移動到的目錄之前的路徑中,Bash使用該程式的早期版本。

但是,如果使用如下所示的-a(all)選項,即使找到匹配項也會繼續搜尋:

which -a htg

linux下如何使用which命令

然後列出路徑中任何目錄中的所有匹配項。

所以,這就是問題所在,這個程式的早期版本在一個目錄中,這個目錄也在補丁中。在我們刪除新版本程式的目錄之前,這個目錄正在被搜尋。

為了驗證,我們可以鍵入以下內容並顯式執行每個版本的程式:

/usr/local/bin/htg /usr/bin/htg

linux下如何使用which命令

這就解釋了問題所在,解決方法很簡單。

實際上,我們有選擇。我們可以刪除/use/local/bin目錄中的舊版本,也可以將其從/usr/bin移到/usr/local/bin。

看那些結果

兩個結果並不一定意味著兩個二進位制檔案。

讓我們看一個示例,在該示例中,我們將使用which命令和-a(all)選項,並查詢less程式的版本:

which -a less

linux下如何使用which命令

哪兩個地方有less程式的版本,但這是真的嗎?在一臺Linux計算機上安裝兩個不同版本(或者在多個位置安裝同一版本)的less是很奇怪的。所以,我們不接受它的輸出。相反,讓我們更深入一點。

我們可以使用ls、-l(長列表)和-h(人類可讀)選項來檢視發生了什麼:

ls -lh /usr/bin/less

linux下如何使用which命令

檔案大小報告為9個位元組!這絕對不是less的完整副本。

列表的第一個字元是“l”。普通檔案的第一個字元是連字元(-)。“l”是一個符號,表示符號連線。如果忽略了該細節,則-->符號還表示這是一個符號連結,可以將其視為一種快捷方式。這個指向less in/bin的副本。

讓我們用less in/bin的版本再試一次:

ls -lh /bin/less

linux下如何使用which命令

這個條目顯然是一個“真正的”二進位制可執行檔案。清單的第一個字元是連字元(-),這意味著它是一個常規檔案,檔案大小為167KB。因此,只安裝了less的一個副本,但是有一個從另一個目錄指向它的符號連結,Bash在搜尋路徑時也會找到這個連結。

相關:如何使用ls命令列出Linux上的檔案和目錄

一次檢查多個命令

你可以傳遞多個程式和命令給它,它會按順序檢查它們。

例如,如果鍵入:

which ping cat uptime date head

linux下如何使用which命令

它透過提供給它的程式和命令列表工作,並列出每個程式和命令的結果。

哪個是哪個?

如果您有這種傾向,您也可以透過鍵入以下內容來使用它本身:

which which

除了出於好奇而瀏覽Linux檔案系統之外,當您期望從一個命令或程式獲得一組行為時,這是最有用的。

在這些情況下,您可以使用哪個來驗證Bash正在啟動的命令是您想要使用的命令。

  • 發表於 2021-04-02 20:07
  • 閱讀 ( 48 )
  • 分類:網際網路

你可能感興趣的文章

如何在windows10上獲得linux bash shell

... 如何在windows10上安裝linux bash shell ...

  • 發佈於 2021-03-21 11:48
  • 閲讀 ( 58 )

linux下如何重新命名檔案

要在Linux中重新命名檔案嗎?如果您知道如何在Windows、macOS或Chrome作業系統中完成這項工作,那麼您就知道如何在這裡完成這項工作。在大多數版本的Linux上,您只需右鍵單擊一個檔案並選擇Rename選項。 ...

  • 發佈於 2021-03-22 02:48
  • 閲讀 ( 63 )

如何使用mv命令移動linux檔案

雖然您可能已經知道如何使用GUI檔案瀏覽器在Linux中移動檔案,但您可能想知道終端中是否有move命令允許您將檔案快速移動到不同的目錄。mv命令就是您想要的命令,它的簡單語法和一些可選的安全標誌很容易使用。 ...

  • 發佈於 2021-03-28 17:18
  • 閲讀 ( 35 )

如何在ubuntulinux上管理啟動程式

...您可能還想將自己喜歡的程式新增到啟動過程中。下面是如何控制Ubuntu在登入時啟動什麼。 我們在Ubuntu20.04 LTS上用預設的GNOME桌面運行了這個過程。這些步驟在其他帶有GNOME桌面的Linux發行版上是類似的,但是您可能需要在其他...

  • 發佈於 2021-04-01 17:50
  • 閲讀 ( 48 )

如何使用chsh在linux上更改預設shell

Bash不是唯一的Linux shell。很容易嘗試其他的shell,比如非常流行的Zsh。找到一個您喜歡的shell後,使用chsh命令將其設定為預設shell。我們會教你怎麼做。 為什麼貝殼很重要 shell位於您和作業系統之間。它在終端視窗內提供環境...

  • 發佈於 2021-04-02 06:04
  • 閲讀 ( 64 )

如何在linux中向$path新增目錄

...但這並沒有什麼不好的地方。我們將解釋它的作用,以及如何調整它。 什麼是$path,它是如何工作的($path on linux, and how does it work)? 當您在終端視窗中鍵入一個命令並按Enter鍵時,您甚至在執行命令之前就開始了大量的活動。 B...

  • 發佈於 2021-04-02 14:04
  • 閲讀 ( 42 )

linux下如何使用finger命令

...管是什麼原因,如果你被迫或只是喜歡使用手指,這裡是如何安裝和使用它。 相關:如何在Linux上使用pinky命令 安裝手指 您可以使用以下命令在Ubuntu上安裝finger: sudo apt-get install finger 要在Fedora上安裝finger,請使用以下命令:...

  • 發佈於 2021-04-03 04:04
  • 閲讀 ( 34 )

如何在linux上使用chmod命令

...Linux檔案許可權,乍看起來很複雜,但一旦你知道它們是如何工作的,實際上就相當簡單了。 chmod修改檔案許可權 在Linux中,誰可以對檔案或目錄做什麼是透過許可權集來控制的。有三組許可權。一組用於檔案所有者,另一組...

  • 發佈於 2021-04-03 05:19
  • 閲讀 ( 47 )

如何在linux上使用time命令

想知道一個程序運行了多長時間以及更多嗎?Linux time命令返回時間統計資訊,讓您對程式所使用的資源有更深入的瞭解。 時間有很多親戚 有許多Linux發行版和不同的類Unix作業系統。每一個都有一個預設的命令shell。現代Linux發...

  • 發佈於 2021-04-03 12:59
  • 閲讀 ( 38 )

linux下如何使用wall命令

...果您需要將訊息快速傳送給已登入計算機的使用者,您該如何做?電子郵件不符合要求。你不知道郵件什麼時候會被閱讀。如果你現在想讓人們知道一些事情,那就沒用了。無論如何,你不想阻塞那些不需要檢視訊息的已登出使...

  • 發佈於 2021-04-03 13:06
  • 閲讀 ( 47 )
k8766xro
k8766xro

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦