如何获取**所有**包的安装/未安装状态?

如何获取**所有**包的安装/未安装状态?

我找到了无数的参考资料获取已安装软件包的列表,但我怎样才能打印一个列表所有已知软件包及其“软件包状态”not-installedinstalledhalf-installedETC。定义为dpkg) 在 shell 中,理想情况下是这样的:

awk   not-installed
bash  installed
cc    half-installed
[...]

dpkg --get-selectionsdpkg --list仅列出已安装的包。

dpkg --get-selections '.' 不是工作

apt-cache dump不打印软件包是否已安装,还打印很多无关的内容。

我正在使用 Travis CI,它是运行 Ubuntu 12.04 LTS 服务器版 64 位例如dpkg-query1.16.1.2

答案1

你要dpkg-query;

对于dpkg-query>= 1.17.11:

dpkg-query -f '${Package}\t${db:Status-Status}\n' -W '*'

对于dpkg-query<1.17.11:

dpkg-query -f '${Package} ${Status}\n' -W '*' | awk '{print $1"\t"$4}'

#1

  • -f '${Package}\t${db:Status-Status}\n':与选项一起使用时-W,指定输出的格式(man dpkg-query有关其他选项,请参阅);
  • -W '*':列出所有与模式匹配的包*

#2

  • -f '${Package} ${Status}\n':与选项一起使用时-W,指定输出的格式(man dpkg-query有关其他选项,请参阅);
  • -W '*':列出所有与模式匹配的包*
  • awk '{print $1"\t"$4}':仅打印第一和第四个字段;

在这种情况下,您似乎想要列出状态字,因此我选择了db:Status-Status虚拟字段;以下是与包状态相关的其他虚拟字段:

              db:状态缩写
                     它包含缩写的包裹状态,例如“ii”
                     (自 dpkg 1.16.2 起)。

              db:状态-想要
                     它包含软件包所需状态,是状态的一部分
                     字段(自 dpkg 1.17.11 起)。

              db:状态-状态
                     它包含包状态字,是状态的一部分
                     字段(自 dpkg 1.17.11 起)。

              db:状态标志
                     它包含包状态错误标志,是
                     状态字段(自 dpkg 1.17.11 起)。

user@user-X550CL ~/tmp % dpkg-query -f '${Package}\t${db:status-status}\n' -W '*' | head
aalib1  not-installed
account-plugin-aim  installed
account-plugin-empathy  not-installed
account-plugin-facebook installed
account-plugin-flickr   installed
account-plugin-foursquare   not-installed
account-plugin-gadugadu not-installed
account-plugin-generic-oauth    not-installed
account-plugin-google   installed
account-plugin-groupwise    not-installed

答案2

dpkg-query -l '*'

将显示所有已安装、已卸载和半安装的软件包。只需 grep 您想要过滤的软件包即可。

相关内容