几个月前我在我的 Ubuntu 14.04 上安装了 JDK 包,但我不知道如何检查它是哪个版本。
那么如何查找某个软件包是否已在 Ubuntu 上安装以及安装了哪个版本?
答案1
总结:对于具有紧凑输出的简单命令(否| grep
),您可以使用
apt list package
,这通常是你想要的(与 相比),apt-cache policy package
或者dpkg-query -W package
作为一个不太混乱的版本dpkg -l
。package
这apt
命令(用于)在 Ubuntu 14.04 及更高版本中可用。apt list package
apt list
告诉您您的包是否已安装。
apt list package
显示已安装或将要安装的软件包的版本,以及提供该软件包的存储库组件的名称和版本。安装软件包后,[installed]
会突出显示在行末。
ek@Io:~$ apt list firefox
Listing... Done
firefox/xenial-updates,xenial-security,now 51.0.1+build2-0ubuntu0.16.04.1 amd64 [installed]
N: There is 1 additional version. Please use the '-a' switch to see it
除了[installed]
末尾的 之外,now
存储库组件列表中的 表示该包当前已安装。这是apt list
的输出,对于一个包来说不是已安装:
ek@Io:~$ apt list dolphin
Listing... Done
dolphin/xenial 4:15.12.3-0ubuntu1 amd64
有时您会看到[installed,automatic]
,这表示该软件包是作为其他软件包的依赖项安装的。由于它是自动安装的,而不是手动安装的,因此可以在删除所有依赖它的软件包后将其删除(这就是命令所做的apt autoremove
)。
ek@Io:~$ apt list zeitgeist-core
Listing... Done
zeitgeist-core/xenial,now 0.9.16-0ubuntu4 amd64 [installed,automatic]
您可以使用apt list --installed
来显示仅有的已安装的软件包。
即使软件包没有安装,查看列表的一个好处是,你知道是指定名称的包。否则,如果您不小心拼写错误,您可能会认为您指定的包意味着未安装。
ek@Io:~$ apt list firefoz
Listing... Done
但如果你确实更喜欢没有什么如果您没有包,请使用:apt list --installed package
ek@Io:~$ apt list --installed firefox dolphin
Listing... Done
firefox/xenial-updates,xenial-security,now 51.0.1+build2-0ubuntu0.16.04.1 amd64 [installed]
N: There is 1 additional version. Please use the '-a' switch to see it
通配符可以帮助您列出那些您不知道或不想输入名称的包。
正如您刚刚看到的,您可以将多个包名称传递给apt list
。您可以做的另一件事是将其传递给A全局,其中 a*
表示零个或多个字符,?
表示一个字符。需要注意以下几点:
- 你的外壳还将 glob 扩展为文件名,但那是不是你想在这里发生什么,所以你应该总是引用他们(在
'
'
或中"
"
,或与\
)当您将它们传递给 时apt list
。 - 尽管 globs 和常用表达都支持字符类(例如,
[csz]sh
匹配csh
,ssh
zsh
),它们并不相同,*
并且?
意味着不同的事情在 glob 中比在正则表达式中更容易找到。这很重要,因为用于获取有关包的信息的一些其他命令(例如)使用正则表达式而不是 glob。您应该在执行命令之前检查命令是否使用 glob 或正则表达式apt-cache policy package
依靠在任一功能上。 - 当你实际添加或删除软件包时,一定不将 glob 与正则表达式相混淆。
apt list 'wine*'
列出所有名称以 开头的软件包wine
,但删除所有名称中带有(甚至不带有)apt remove 'wine*'
的软件包!win
e
例如,假设我知道我感兴趣的包的soap
名称中某处有 并且以 结尾cil
,但我只记得这些:
ek@Io:~$ apt list '*soap*cil'
Listing... Done
libmono-system-runtime-serialization-formatters-soap4.0-cil/xenial,xenial,now 4.2.1.102+dfsg2-7ubuntu4 all [installed,automatic]
通配符也很方便,当你做知道您感兴趣的软件包的全名,但不想输入它。或者当您对与 glob 匹配的多个软件包感兴趣时:
ek@Io:~$ apt list 'firefox-locale-*'
Listing... Done
firefox-locale-af/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-an/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ar/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-as/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ast/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-az/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-be/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-bg/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-bn/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-br/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-bs/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ca/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-cak/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-cs/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-csb/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-cy/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-da/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-de/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-el/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-en/xenial-updates,xenial-security,now 51.0.1+build2-0ubuntu0.16.04.1 amd64 [installed]
firefox-locale-eo/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-es/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-et/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-eu/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-fa/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-fi/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-fr/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-fy/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ga/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-gd/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-gl/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-gn/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-gu/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-he/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-hi/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-hr/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-hsb/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-hu/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-hy/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-id/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-is/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-it/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ja/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ka/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-kab/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-kk/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-km/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-kn/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ko/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ku/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-lg/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-lt/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-lv/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-mai/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-mk/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ml/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-mn/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-mr/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ms/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-nb/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-nl/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-nn/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-nso/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-oc/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-or/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-pa/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-pl/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-pt/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ro/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ru/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-si/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-sk/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-sl/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-sq/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-sr/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-sv/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-sw/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-ta/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-te/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-th/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-tr/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-uk/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-uz/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-vi/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-xh/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-zh-hans/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-zh-hant/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
firefox-locale-zu/xenial-updates,xenial-security 51.0.1+build2-0ubuntu0.16.04.1 amd64
软件包数量非常多。(虽然没有我运行的那么多apt list '*'
,但它列出了全部--installed
可用的包!)幸运的是,globs也可以用于:
ek@Io:~$ apt list --installed 'firefox-locale-*'
Listing... Done
firefox-locale-en/xenial-updates,xenial-security,now 51.0.1+build2-0ubuntu0.16.04.1 amd64 [installed]
N: There is 1 additional version. Please use the '-a' switch to see it
apt list
对阵dpkg-query -W
您可以使用的另一个命令是。这类似于dpkg-query -W package
dpkg -l
,但其输出更加精简和易读,因为只打印包名称和已安装的版本(如果有)。
dpkg-query -W
列出所有dpkg
符合您指定名称或 glob 模式的软件包。这包括已安装的软件包以及未安装但被其他软件包引用的软件包。您可以知道实际安装了哪些软件包,因为安装的版本号/字符串打印在名称的右侧。例如,在我的 16.04 系统上:
ek@Io:~$ dpkg-query -W wine-\*
wine-amd64
wine-gecko
wine-gecko2.21:amd64 2.21-0ubuntu1
wine-gecko2.21:i386 2.21-0ubuntu1
wine-i386
wine-mono
wine-mono0.0.8 0.0.8-0ubuntu1
因此,列出的软件包、wine-gecko2.21:amd64
和wine-gecko2.21:i386
(即wine-gecko2.21
针对amd64
和i386
体系结构)和wine-mono0.0.8
是我当前已安装的软件包。
dpkg-query -W
并且apt list
始终知道已安装的软件包,无论它们是否由当前配置的任何软件源提供,也无论它们是否被其他软件包引用。但是:
apt list
还知道任何当前配置的软件源中可用的软件包,但不知道其他软件包引用的不可用软件包。dpkg-query -W
(例如dpkg -l
)并不直接反映实际可用的软件包,但知道已安装的任何软件包所引用的软件包。
在同一台机器上:
ek@Io:~$ apt list wine-\*
Listing... Done
wine-development/xenial,xenial 1.9.6-1 all
wine-gecko2.21/xenial,now 2.21-0ubuntu1 amd64 [installed,automatic]
wine-mono0.0.8/xenial,xenial,now 0.0.8-0ubuntu1 all [installed,automatic]
与 一样dpkg -l
,当您使用dpkg-query -W
您没有的包的名称运行时(例如,我没有chocolate-doom
安装),其输出与使用根本不存在的包的名称运行时相同(例如,由于拼写错误,如firefoz
):
ek@Io:~$ dpkg-query -W chocolate-doom firefoz
dpkg-query: no packages found matching chocolate-doom
dpkg-query: no packages found matching firefoz
相反,apt list
明确显示仅chocolate-doom
存在(但未安装):
ek@Io:~$ apt list chocolate-doom firefoz
Listing... Done
chocolate-doom/xenial 2.2.1-2.1 amd64
答案2
在终端中运行dpkg -l | grep <name or pattern>
。例如,
dpkg -l | grep firefox
ii firefox 51.0.1+build2-0ubuntu0.14.04.2 amd64
那个ii
东西的意思是安装好了。显然,如果没有输出,则表示包没有安装。
答案3
如果您知道包名称,请使用apt-cache
策略:
$ apt-cache policy firefox | grep 'Installed:'
Installed: 51.0.1+build2-0ubuntu0.16.04.1
$ apt-cache policy golang | grep 'Installed:'
Installed: (none)
如果没有,请使用dpkg --get-selections | grep 'jdk'
$ dpkg --get-selections | grep 'jdk'
jdk1.8.0-111 deinstall
openjdk-7-jre-headless:amd64 deinstall
openjdk-8-jdk:amd64 install
openjdk-8-jdk-headless:amd64 install
openjdk-8-jre:amd64 install
openjdk-8-jre-headless:amd64 install
openjdk-9-jre-headless:amd64 deinstall
答案4
使用dpkg 命令,它是 Debian 的包管理器。
>dpkg -s /package name/
使用文件 /var/lib/dpkg/available找出所有可用的包名称。
或者您可以使用以下命令(它列出所有软件包/var/lib/dpkg/状态):
>dpkg-query -l
您还可以尝试使用以下方法匹配包名称万能牌:
>dpkg-query -l 'libc6*'