alok aggarwal Asked: 2020-03-06 23:07:09 +0800 CST2020-03-06 23:07:09 +0800 CST 2020-03-06 23:07:09 +0800 CST dpkg-query 仅显示已安装的软件包而不是“rc” 772 我在用: dpkg-query -W -f='${package}\t${version}\t${architecture}\n' 列出已安装的软件包,但它还显示标记为要删除的软件包,即状态rc。 如何仅获取已安装的软件包? dpkg package-management 2 个回答 Voted Nasir Riley 2020-03-06T23:37:25+08:002020-03-06T23:37:25+08:00 您正在使用的命令仅指定包、版本号和体系结构,并且无论状态如何都会将其全部打印出来。 如果您只想显示已安装的软件包: 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"' Best Answer Stephen Kitt 2020-03-07T01:23:06+08:002020-03-07T01:23:06+08:00 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
您正在使用的命令仅指定包、版本号和体系结构,并且无论状态如何都会将其全部打印出来。
如果您只想显示已安装的软件包:
状态将位于第一列,
ii
表示预计将安装并安装。进入的管道grep ^ii
仅显示具有该状态的包。如果您只想安装 amd64 架构的软件包:
那只会打印包含
ii
状态和amd64
.要做同样的事情
awk
,只打印第一列有ii
和第四列有的行amd64
:dpkg-query
不支持过滤状态,但它可以输出包的状态,这允许它们被过滤:dpkg -l
是基于的dpkg-query
,因此也不能过滤状态本身。aptitude
提供更强大的搜索选项,并可用于此;请参阅获取与模式匹配的已安装软件包列表的正确方法?详情。以下命令将显示所有已安装包(且仅已安装包)的包名称、版本和体系结构:请注意,如果包名与系统的主要架构不匹配,则包名将包含架构;例如