Пакет "состояние" и "состояние выбора"

Все ответы, которые я прочитал, предлагают распечатку / сохранение состояний выбора пакетов. т.е. dpkg --get-selections

Но состояние выбора может отличаться от фактического. Так зачем это использовать? Это просто потому, что получение фактического состояния пакета является более сложным?

Например, получение "установленных пакетов", имеет 2 возможных решения:

  • получить имена пакетов, состояние выбора которых установлено сdpkg --get-selections | grep install | cut -f1

  • получить имена пакетов, состояние которых установлено сdpkg -l | tail -n +6 | grep '^.i' | cut -d' ' -f3

В отличие от dpkg --get-selectionsdpkg -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
Другие вопросы по тегам