如何在Debian/Ubuntu系統(tǒng)中檢查程序包是否安裝?
我們近期發(fā)布了一篇關(guān)于批量程序包安裝的文章。在此同時(shí),關(guān)于如何獲取系統(tǒng)上已安裝了的程序包信息,我也做了些調(diào)查然后找到了些方法。我會(huì)把這些方法分享在我們的網(wǎng)站上,希望能幫助到其他人。
有很多種方法可以檢查程序包是否已安裝,我找到了 7 種命令,你可以從中選擇你喜歡的使用。
如下:
apt-cache
:可用于查詢 APT 緩存或程序包的元數(shù)據(jù)。apt
:是基于 Debian 的系統(tǒng)中的安裝、下載、刪除、搜索和管理包的強(qiáng)有力的工具。dpkg-query
:一個(gè)查詢 dpkg 數(shù)據(jù)庫(kù)的工具。dpkg
:基于 Debian 的系統(tǒng)的包管理工具。which
:返回在終端中輸入命令時(shí)執(zhí)行的可執(zhí)行文件的全路徑。whereis
:可用于搜索指定命令的二進(jìn)制文件、源碼文件和幫助文件。locate
:比find
命令快,因?yàn)槠涫褂?updatedb
數(shù)據(jù)庫(kù)搜索,而find
命令在實(shí)際系統(tǒng)中搜索。
方法一、使用 apt-cache 命令
apt-cache
命令用于從 APT 內(nèi)部數(shù)據(jù)庫(kù)中查詢APT 緩存和包的元數(shù)據(jù),將會(huì)搜索和顯示指定包的信息,包括是否安裝、程序包版本、源碼倉(cāng)庫(kù)信息等。
下面的示例清楚的顯示 nano
包已經(jīng)在系統(tǒng)中安裝了以及對(duì)應(yīng)安裝的版本號(hào)。
# apt-cache policy nano
nano:
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
是一個(gè)功能強(qiáng)大的命令行工具,可用于安裝、下載、刪除、搜索、管理程序包以及查詢關(guān)于程序包的信息,類似對(duì)于 libapt-pkg
庫(kù)的所有功能的底層訪問(wèn)。其包含一些與包管理相關(guān)的但很少用到的命令行功能。
# apt -qq list nano
nano/bionic,now 2.9.3-2 amd64 [installed]
方法三、使用 dpkg-query 命令
dpkg-query
是顯示 dpkg
數(shù)據(jù)庫(kù)中程序包信息列表的一個(gè)工具。
下面示例中的輸出的***列 ii
,表示查詢的程序包已安裝了。
# dpkg-query --list | grep -i nano
ii nano 2.9.3-2 amd64 small, friendly text editor inspired by Pico
方法四、使用 dpkg 命令
dpkg
(debian package)是一個(gè)安裝、構(gòu)建、刪除和管理 Debian 包的工具,但和其他包管理系統(tǒng)不同的是,其不能自動(dòng)下載和安裝包或包依賴。
下面示例中的輸出的***列 ii
,表示查詢的包已安裝了。
# dpkg -l | grep -i nano
ii nano 2.9.3-2 amd64 small, friendly text editor inspired by Pico
方法五、使用 which 命令
which
命令返回在終端中輸入命令時(shí)執(zhí)行的可執(zhí)行文件的全路徑。這對(duì)于你想要給可執(zhí)行文件創(chuàng)建桌面快捷方式或符號(hào)鏈接時(shí)非常有用。
which
命令僅在當(dāng)前用戶 PATH
環(huán)境變量配置的目錄列表中搜索,而不是在所有用戶的目錄中搜索。這意思是當(dāng)你登入你自己賬號(hào)時(shí),其不會(huì)在 root
用戶文件或目錄中搜索。
如果對(duì)于指定的程序包或可執(zhí)行文件路徑有如下輸出,則表示已安裝了,否則沒(méi)有。
# which nano
/bin/nano
方法六、使用 whereis 命令
whereis
命令用于針對(duì)指定命令搜索對(duì)應(yīng)的程序二進(jìn)制文件、源碼文件以及幫助文件等。
如果對(duì)于指定的程序包或可執(zhí)行文件路徑有如下輸出,則表示已安裝了,否則沒(méi)有。
# whereis nano
nano: /bin/nano /usr/share/nano /usr/share/man/man1/nano.1.gz /usr/share/info/nano.info.gz
方法七、使用 locate 命令
locate
命令比 find
命令快,因?yàn)槠湓?updatedb
數(shù)據(jù)庫(kù)中搜索,而 find
命令在實(shí)際系統(tǒng)中進(jìn)行搜索。
對(duì)于獲取指定文件,其使用數(shù)據(jù)庫(kù)而不是在特定目錄路徑中搜索。
locate
命令不會(huì)預(yù)安裝在大多數(shù)系統(tǒng)中,需要手動(dòng)安裝。
locate
使用的數(shù)據(jù)庫(kù)會(huì)根據(jù)定時(shí)任務(wù)定期更新。當(dāng)然,我們也可以手動(dòng)更新。
如果對(duì)于指定的程序包或可執(zhí)行文件路徑有如下輸出,則表示已安裝了,否則沒(méi)有。
# locate --basename '\nano'
/usr/bin/nano
/usr/share/nano
/usr/share/doc/nano