apt-cache 和 dpkg -l 之间的区别

apt-cache 和 dpkg -l 之间的区别

我使用 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 还可用作 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 显示已添加的存储库中所有可用的软件包名称(但不是同一软件包的版本)。

相关内容