我在用:
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"'