dpkg-query 仅显示已安装的软件包而不是“rc”

dpkg-query 仅显示已安装的软件包而不是“rc”

我在用:

dpkg-query -W -f='${package}\t${version}\t${architecture}\n'

列出已安装的软件包,但它还显示标记为删除的软件包,即带有 status 的软件包rc

如何仅获取已安装的软件包?

答案1

dpkg-query不支持状态过滤,但它可以输出包的状态,从而允许过滤它们:

dpkg-query -W -f='${Status}\t${package}\t${version}\t${architecture}\n' | grep "^install ok installed"

dpkg -l基于dpkg-query状态本身,因此也无法过滤状态本身。

aptitude提供更强大的搜索选项,并且可以用于此;看获取与模式匹配的已安装软件包列表的正确方法?了解详情。以下命令将显示所有已安装软件包(并且仅已安装软件包)的软件包名称、版本和体系结构:

aptitude search "~i" -F "%p%v#%E"

请注意,如果包名称与系统的主要架构不匹配,则包名称将包含架构;例如

zlib1g       1:1.2.11.dfsg-1  amd64
zlib1g:i386  1:1.2.11.dfsg-1  i386      

答案2

您使用的命令仅指定包、版本号和体系结构,并且无论状态如何,都会打印所有内容。

如果您只想显示已安装的软件包:

dpkg --list | grep ^ii

状态将显示在第一列中,这ii意味着它预计将被安装。管道grep ^ii仅显示具有该状态的包。

如果您只想安装 amd64 架构的软件包:

dpkg --list | grep "^ii.*amd64"

ii这只会打印包含状态和 的包amd64

要执行相同的操作,awk仅打印第一列ii和第四列的行amd64

dpkg --list | awk '$1=="ii" && $4=="amd64"'

相关内容