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


9

我使用apt-cache pkgname将软件包检索为

me@host:~$ apt-cache pkgnames | wc -l
62803

得到62803个结果

me@host:~$ dpkg -l | wc -l
2336

造成如此巨大差异的原因是什么?我认为dpkg比apt超级。



@Olorin我投票赞成将此问题保留为开放状态。它们是重复项,但是我希望将重复的方向反转,并关闭dpkg-query vs apt-cache作为此问题的重复项。
karel

Answers:


16

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)的前端。稍后可在“操作”部分中找到支持的操作的列表。如果遇到任何此类操作,则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模式作为参数,并根据是否存在 glob模式仅显示已安装/配置的软件包或所有软件包。


2

dpkg -l显示您已安装的软件包版本(以ii开头),已删除的软件包版本(rc)和其他一些版本(例如,已安装但未配置,请参见手册页)。

apt-cache pkgnames在添加的存储库中显示所有可用的软件包名称(但不显示同一软件包的版本)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.