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

67

Я использую команду 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 эти строки становятся все длиннее и длиннее. Есть ли более простой способ?

    
задан Jorge Castro 30.11.2010 в 07:20
источник

5 ответов

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

е. г:.

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

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

Version: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
    
ответ дан aneeshep 30.11.2010 в 07:27
источник
24

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

Пример:

$ apt-show-versions network-manager  
network-manager/maverick uptodate 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
    
ответ дан Isaiah 30.11.2010 в 07:37
23
dpkg-query --showformat='${Version}' --show python3-lxml
    
ответ дан A T 22.12.2015 в 03:16
14

Я думаю, что aneeshep's - лучший ответ, так как ваш вопрос указывает на использование 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
    
ответ дан andrewsomething 30.11.2010 в 19:59
5

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

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

Пример:

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

Объяснение:

Команда

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

$ dpkg -l
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

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

    
ответ дан Avinash Raj 30.03.2014 в 10:46