包“状态”与“选择状态”

包“状态”与“选择状态”

我读过的所有答案都建议列出/保存包选择州。即dpkg --get-selections

选择状态可能不同于实际的。那么为什么要用它呢?难道只是因为获取实际的包裹状态更加复杂吗?

例如获取“已安装的包”,有两种可能的解决方案:

  • 获取包的名称选择状态安装dpkg --get-selections | grep install | cut -f1

  • 获取以下包的名称状态已安装dpkg -l | tail -n +6 | grep '^.i' | cut -d' ' -f3

不同于其他,dpkg --get-selections dpkg -l它用于查看,而不是处理。这是为什么呢?

答案1

dpkg --get-selections仅输出封装选择状态,而不是封装状态。输出dpkg -l 包含封装实际状态,但是dpkg -l由于更接近图形方法,因此处理输出有点困难。

因此如果您想提取包状态,您可以使用dpkg-query工具。

它提供使用格式化选项-f, --showformat=format

man dpkg-query

-f, --showformat=format
              This  option  is used to specify the format of the output --show
              will produce. The format is a string that  will  be  output  for
              each package listed.

因此我将${binary:Package}字段与${Status}获取包裹的实际状态结合起来。

dpkg-query --show -f='${binary:Package} \t\t ${Status}\n'

为了获得更格式化的输出,您可以使用

dpkg-query --show -f='${binary:Package} ${Status}\n'  | awk '{ printf "%-60s %s\n", $1, $2" "$3" "$4}'


例子

使用dpkg -l

$dpkg -l vlc
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                           Version              Architecture         Description
+++-==============================-====================-====================-=================================================================
hU  vlc                            2.2.0~pre2-4build1   amd64                multimedia player and streamer

使用dpkg-query --show

$ dpkg-query --show -f='${binary:Package} ${Status}\n' vlc  | awk '{ printf "%-60s %s\n", $1, $2" "$3" "$4}'
vlc                                                          hold ok unpacked

相关内容