Пакет "состояние" и "состояние выбора"
Все ответы, которые я прочитал, предлагают распечатку / сохранение состояний выбора пакетов. т.е. dpkg --get-selections
Но состояние выбора может отличаться от фактического. Так зачем это использовать? Это просто потому, что получение фактического состояния пакета является более сложным?
Например, получение "установленных пакетов", имеет 2 возможных решения:
получить имена пакетов, состояние выбора которых установлено с
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