Как я могу найти номер версии установленного пакета с помощью dpkg?

Я использую dpkg -l команда, чтобы узнать, какую версию пакета я установил. Например:

dpkg -l network-manager

возвращает информацию на упаковке:

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                   Description+++-=========================-=========================-==================================================================ii  network-manager           0.8.3~git.20101118t223039 network management framework daemon

Как вы можете видеть, он возвращает 0.8.3~git.20101118t223039 что неверно, потому что оно усекает версию (я выбрал длинную для целей этого вопроса). Способ, которым я решал эту проблему в прошлом, - передать глупо длинный аргумент COLUMNS, чтобы заставить его расширяться:

COLUMNS=200 dpkg -l network-manager

который дает мне полный номер версии, но также и кучу ненужного хлама:

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                                      Description+++-============================================-============================================-========================================================================================================ii  network-manager                              0.8.3~git.20101118t223039.d60a988-0ubuntu1   network management framework daemon

Теперь я вижу полный номер версии, который 0.8.3~git.20101118t223039.d60a988-0ubuntu1.

У меня такое ощущение, что это неправильный способ найти номер версии установленного пакета. В прошлом это никогда не было проблемой, но с появлением "ubuntu" в версиях и распространением PPA эти строки становятся все длиннее и длиннее. Есть ли более простой способ?

dpkg -s <packagename> | grep '^Version:'

например.:

dpkg -s network-manager | grep '^Version:'

Пример вывода:

Version: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
dpkg-query --showformat='${Version}' --показать python3-lxml

Он не использует dpkg командовать, но apt-show-версии Install banshee

Пример:

$ apt-show-versions network-manager  network-manager/maverick uptodate 0.8.1+git.20100810t184654.ab580f4-0ubuntu2

Я думаю, что aneeshep - лучший ответ, поскольку в вашем вопросе указано использование dpkg. Но для полноты картины, вот еще один способ:

apt-cache policy network-manager network-manager:  Installed: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2  Candidate: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2  Version table: *** 0.8.1+git.20100810t184654.ab580f4-0ubuntu2 0        500 http://us.archive.ubuntu.com/ubuntu/ maverick/main i386 Packages        100 /var/lib/dpkg/status

Или только для номера версии:

apt-cache policy network-manager | grep 'Installed:' | cut -c 14-0.8.1+git.20100810t184654.ab580f4-0ubuntu2

Другой способ найти версию установленного пакета с помощью dpkg как показано ниже,

dpkg -l | awk '$2=="package-name" { print $3 }'  

Пример:

$ dpkg -l | awk '$2=="network-manager" { print $3 }'0.9.8.0-0ubuntu22

Объяснение:

dpkg -l команда содержит список всех установленных пакетов.Этот стандартный вывод был передан в качестве входных данных в awk команда.awk выполняет поиск соответствующего имени пакета в стандартном вводе(колонка 2) если он находит, то он захватывает соответствующую строку. И, наконец, выводит значение (колонка 3), который на самом деле представляет версию пакета.

$ dpkg -lDesired=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

В соответствии с вышеизложенным, столбец 2 представляет собой имя пакета, столбец 3 представляет собой версия пакета, столбец 4 представляет собой архитектура и столбец 5 представляет описание упаковки.

Команда apt -qq list <package-name> показывает, установлен ли пакет, и, по-видимому, возвращает полный номер версии.

Пример 1 – использование -qq

$ apt -qq list network-managernetwork-manager/now 1.10.14-0ubuntu2 amd64 [installed,local]

Пример 2 – использование -qq и *

$ apt -qq list virtualbox-6*virtualbox-6.0/unknown 6.0.24-139119~Ubuntu~bionic amd64virtualbox-6.1/unknown,now 6.1.16-140961~Ubuntu~bionic amd64 [installed]

Пример 3 – использование -qqa

$ apt -qqa list keepassxckeepassxc/bionic,now 2.6.2-1ppa1~bionic1 amd64 [installed]keepassxc/bionic 2.3.1+dfsg.1-1 amd64