如何在 Debian/Ubuntu 系統中檢查程式包是否安裝?

2019-06-23 23:55:00

我們近期發布了一篇關於批次程式包安裝的文章。在此同時,關於如何獲取系統上已安裝了的程式包資訊,我也做了些調查然後找到了些方法。我會把這些方法分享在我們的網站上,希望能幫助到其他人。

有很多種方法可以檢查程式包是否已安裝,我找到了 7 種命令,你可以從中選擇你喜歡的使用。

如下:

  • apt-cache:可用於查詢 APT 快取或程式包的後設資料。
  • apt:是基於 Debian 的系統中的安裝、下載、刪除、搜尋和管理包的強有力的工具。
  • dpkg-query:一個查詢 dpkg 資料庫的工具。
  • dpkg:基於 Debian 的系統的包管理工具。
  • which:返回在終端中輸入命令時執行的可執行檔案的全路徑。
  • whereis:可用於搜尋指定命令的二進位制檔案、原始碼檔案和幫助檔案。
  • locate:比 find 命令快,因為其使用 updatedb 資料庫搜尋,而 find命令在實際系統中搜尋。

方法一、使用 apt-cache 命令

apt-cache 命令用於從 APT 內部資料庫中查詢APT 快取包的後設資料,將會搜尋和顯示指定包的資訊,包括是否安裝、程式包版本、原始碼倉庫資訊等。

下面的範例清楚的顯示 nano 包已經在系統中安裝了以及對應安裝的版本號。

# apt-cache policy nanonano:  Installed: 2.9.3-2  Candidate: 2.9.3-2  Version table: *** 2.9.3-2 500        500 http://in.archive.ubuntu.com/ubuntu bionic/main amd64 Packages        100 /var/lib/dpkg/status

方法二、使用 apt 命令

apt 是一個功能強大的命令列工具,可用於安裝、下載、刪除、搜尋、管理程式包以及查詢關於程式包的資訊,類似對於 libapt-pkg 庫的所有功能的底層存取。其包含一些與包管理相關的但很少用到的命令列功能。

# apt -qq list nanonano/bionic,now 2.9.3-2 amd64 [installed]

方法三、使用 dpkg-query 命令

dpkg-query 是顯示 dpkg 資料庫中程式包資訊列表的一個工具。

下面範例中的輸出的第一列 ii,表示查詢的程式包已安裝了。

# dpkg-query --list | grep -i nanoii  nano    2.9.3-2    amd64    small, friendly text editor inspired by Pico

方法四、使用 dpkg 命令

dpkgdebian package)是一個安裝、構建、刪除和管理 Debian 包的工具,但和其他包管理系統不同的是,其不能自動下載和安裝包或包依賴。

下面範例中的輸出的第一列 ii,表示查詢的包已安裝了。

# dpkg -l | grep -i nanoii  nano     2.9.3-2    amd64   small, friendly text editor inspired by Pico

方法五、使用 which 命令

which 命令返回在終端中輸入命令時執行的可執行檔案的全路徑。這對於你想要給可執行檔案建立桌面快捷方式或符號連結時非常有用。

which 命令僅在當前使用者 PATH 環境變數設定的目錄列表中搜尋,而不是在所有使用者的目錄中搜尋。這意思是當你登入你自己賬號時,其不會在 root 使用者檔案或目錄中搜尋。

如果對於指定的程式包或可執行檔案路徑有如下輸出,則表示已安裝了,否則沒有。

# which nano/bin/nano

方法六、使用 whereis 命令

whereis 命令用於針對指定命令搜尋對應的程式二進位制檔案、原始碼檔案以及幫助檔案等。

如果對於指定的程式包或可執行檔案路徑有如下輸出,則表示已安裝了,否則沒有。

# whereis nanonano: /bin/nano /usr/share/nano /usr/share/man/man1/nano.1.gz /usr/share/info/nano.info.gz

方法七、使用 locate 命令

locate 命令比 find 命令快,因為其在 updatedb 資料庫中搜尋,而 find 命令在實際系統中進行搜尋。

對於獲取指定檔案,其使用資料庫而不是在特定目錄路徑中搜尋。

locate 命令不會預安裝在大多數系統中,需要手動安裝。

locate 使用的資料庫會根據定時任務定期更新。當然,我們也可以手動更新。

如果對於指定的程式包或可執行檔案路徑有如下輸出,則表示已安裝了,否則沒有。

# locate --basename '\nano'/usr/bin/nano/usr/share/nano/usr/share/doc/nano