我使用apt-cache pkgname将软件包检索为
me@host:~$ apt-cache pkgnames | wc -l
62803
得到62803个结果
但
me@host:~$ dpkg -l | wc -l
2336
造成如此巨大差异的原因是什么?我认为dpkg比apt超级。
我使用apt-cache pkgname将软件包检索为
me@host:~$ apt-cache pkgnames | wc -l
62803
得到62803个结果
但
me@host:~$ dpkg -l | wc -l
2336
造成如此巨大差异的原因是什么?我认为dpkg比apt超级。
Answers:
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模式仅显示已安装/配置的软件包或所有软件包。