Все ответы, которые я прочитал, предлагают список / сохранение пакета Выбор состояний. то есть dpkg --get-selections
Но состояние выбора может отличаться от фактического . Так зачем это использовать? Это просто потому, что получение фактического состояния пакета более сложное?
Например, получение «установленных пакетов» имеет 2 возможных решения:
получить имена пакетов, чьи состояние выбора равно install с dpkg --get-selections | grep install | cut -f1
получить имена пакетов, состояние которых которых установлено ] с dpkg -l | tail -n +6 | grep '^.i' | cut -d' ' -f3
В отличие от dpkg --get-selections
dpkg -l
предназначен для просмотра, а не обработки. Почему это так?
dpkg --get-selections
только произведите состояния выбора пакета не состояния пакета. Вывод dpkg -l
содержит реальные положения пакета, однако обрабатывающие dpkg -l
вывод является битом, жестким из-за того, чтобы быть больше ближе к графическому подходу.
Таким образом, если Вы хотите извлечь состояние пакета, можно использовать dpkg-query
инструмент.
Это обеспечивает использование параметра форматирования -f, --showformat=format
-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