如何知道ubuntu上是否安装了特定的软件包?
我几个月前在我的Ubuntu 14.04上安装了一个JDK软件包,但我不知道如何检查它是哪个版本。
那么该怎么办我找到是否在Ubuntu上安装了一个软件包以及它的哪个版本安装?
TL; DR:对于具有紧凑输出的简单命令(no | grep
),您可以使用
-
apt list package
,通常是你想要的(比较apt-cache policy package
), 或者 -
dpkg-query -W package
作为dpkg -l
一个不那么混乱的版本。package
apt
命令(对于apt list package
)在Ubuntu 14.04及更高版本中可用。
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
Globbing可帮助您列出您不知道或不想键入的名称的包。
如您所见,您可以将多个包名称传递给apt list
。 你可以做的另一件事是传递一个glob ,其中*
表示零个或多个字符和?
代表一个角色。 有几点需要注意:
- 你的shell也将globs扩展为文件名 ,但这不是你想要在这里发生的事情,因此当你将它们传递给
apt list
时,你应该总是引用它们 (用'
或"
或'
或"
)。 - 虽然globs和正则表达式都支持字符类(例如,
[csz]sh
匹配csh
,ssh
zsh
),但它们不一样,而且*
和?
在glob中表示与正则表达式中不同的东西 。 这很重要,因为用于获取有关包的信息的其他命令(例如apt-cache policy package
)使用正则表达式而不是globs。 在依赖任一function之前,您应该检查命令是否使用globs或正则表达式。 - 当您实际添加和删除包时, 不得将globs与正则表达式混淆。
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]
当你知道你感兴趣的包的全名但不想输入它时,Globbing也很方便。 或者当您对与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 '*'
,它列出了所有可用的包!)幸运的是,globs可以使用 – 也--installed
了:
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
vs. 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
(即amd64
和i386
架构的wine-mono0.0.8
)和wine-mono0.0.8
是我目前拥有的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
在终端中,运行dpkg -l | grep
dpkg -l | grep
。 例如,
dpkg -l | grep firefox ii firefox 51.0.1+build2-0ubuntu0.14.04.2 amd64
ii
的意思是它已安装。 显然,如果没有输出,则不安装包。
如果您知道包名称,请使用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'
$ 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
使用dpkg命令 ,它是Debian的包管理器。
>dpkg -s /package name/
使用文件/ var / lib / dpkg / available查找可用的所有软件包名称。
或者您可以使用以下命令(它列出/ var / lib / dpkg / status中的所有包):
>dpkg-query -l
您还可以尝试使用通配符匹配包名称:
>dpkg-query -l 'libc6*'