我找到了无数的参考资料获取已安装软件包的列表,但我怎样才能打印一个列表所有已知软件包及其“软件包状态”(not-installed
,installed
,half-installed
ETC。定义为dpkg
) 在 shell 中,理想情况下是这样的:
awk not-installed
bash installed
cc half-installed
[...]
dpkg --get-selections
和dpkg --list
仅列出已安装的包。
dpkg --get-selections '.'
做不是工作。
apt-cache dump
不打印软件包是否已安装,还打印很多无关的内容。
我正在使用 Travis CI,它是运行 Ubuntu 12.04 LTS 服务器版 64 位例如dpkg-query
1.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 您想要过滤的软件包即可。