我使用 apt-cache pkgname 来检索软件包
me@host:~$ apt-cache pkgnames | wc -l
62803
获得 62803 个结果
但
me@host:~$ dpkg -l | wc -l
2336
是什么原因导致了如此巨大的差异。我猜想 dpkg 比 apt 好。
答案1
apt
用于管理远程存储库,dpkg
- 用于本地安装的软件包。它们是相关的。apt
是的前端dpkg
。运行时,apt-get install package
它会获取.deb
文件,并通过进行安装dpkg
。因此数字不同,因为有很多软件包可用,但只有一小部分安装在您的系统本地。
apt-cache
可以显示已安装和未安装的软件包,因为它会查询缓存apt
- 列出远程存储库中可用的软件包(该缓存就是您在执行此操作时获得的内容apt-get update
)。例如,
$ apt-cache policy terminator
terminator:
Installed: (none)
Candidate: 1.91-1
$ dpkg -l terminator
dpkg-query: no packages found matching terminator
请注意,还有另一个工具可以查询已安装/已删除的本地软件包列表,那就是dpkg-query
。 例如,
$ dpkg-query -l 'libc6'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-====================-===============-===============-=============================================
ii libc6:amd64 2.27-3 amd64 GNU C Library: Shared libraries
ii libc6:i386 2.27-3 i386 GNU C Library: Shared libraries
$ dpkg -l libc6
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-====================-===============-===============-=============================================
ii libc6:amd64 2.27-3 amd64 GNU C Library: Shared libraries
ii libc6:i386 2.27-3 i386 GNU C Library: Shared libraries
dpkg 还可用作 dpkg-deb(1) 和 dpkg-query(1) 的前端。支持的操作列表可在后面的 ACTIONS 部分中找到。如果遇到任何此类操作,dpkg 只会使用提供给它的参数运行 dpkg-deb 或 dpkg-query,但目前没有向它们传递任何特定选项,要使用任何此类选项,需要直接调用后端。
就目前而言dpkg-query
,需要注意的是,此工具专注于查询已安装软件包的数据库,并且可以以特定格式(-f
选项加-W
操作)输出信息。例如,
$ dpkg-query -W -f='PACK:${Package}\nARCH:${Architecture}\nSTAT:${Status}\n---\n' libc6
PACK:libc6
ARCH:amd64
STAT:install ok installed
---
PACK:libc6
ARCH:i386
STAT:install ok installed
---
有趣的是,dpkg 数据库维护着以下软件包的列表:被选中删除或者被删除.dpkg-query
也可以将 glob 模式作为参数,并且取决于它的存在与否仅显示已安装/配置的包或所有包。
答案2
dpkg -l 显示您已安装的软件包版本(以 ii 开头)、已删除的软件包版本(rc)以及其他一些版本(例如已安装但未配置的软件包版本,请参阅手册页)。
apt-cache pkgnames 显示已添加的存储库中所有可用的软件包名称(但不是同一软件包的版本)。