Yüklenmiş bir paketin sürüm numarasını dpkg üzerinden nasıl bulabilirim?


83

dpkg -lBir paketin hangi sürümünü yüklediğimi bulmak için bu komutu kullanıyorum . Örneğin:

dpkg -l network-manager

paketteki bilgiyi döndürür:

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

Gördüğünüz gibi 0.8.3~git.20101118t223039, yanlış olanı döndürür çünkü sürümü kısaltır (Bu sorunun amacı için uzun bir tane seçtim). Bunu geçmişte çözdüğüm yol, onu genişletmek için aptalca uzun bir SÖZLEŞME argümanı iletmektir:

COLUMNS=200 dpkg -l network-manager

Bu bana tüm sürüm numarasını verir, ama aynı zamanda bir hurdalık:

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

Şimdi tam sürüm numarasını görebilirsiniz 0.8.3~git.20101118t223039.d60a988-0ubuntu1.

Yüklü bir paketin sürüm numarasını bulmanın doğru yol olmadığını hissediyorum. Bu geçmişte hiçbir zaman gerçekten bir sorun değildi, ancak versiyonlardaki "ubuntu" nun kullanılmasıyla ve PPA'ların çoğalmasıyla bu dizgiler uzuyor ve uzuyor. Daha kolay bir yolu var mı?

Yanıtlar:


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

Örneğin:

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

Örnek çıktı:

Version: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2

dpkg --info package.debişe -syaramadı ama olmadı
Twisted Pear

2
@Twisted Pear - dpkg --info package.debpaket dosyalarında dpkg -s <packagename>çalışır, paket adlarında çalışır - dosya gerekmez
şerit

37
dpkg-query --showformat='${Version}' --show python3-lxml

2
Birden fazla paketi dpkg-query --showformat='${Package}\t${Version}\n' --show lsb-release coreutils ...
sorgularken şunu

6
Kesin olduğundan (grep veya kesim gerekli değil) bu sürümü seviyorum.
guettli,

1
Neredeyse kesinlikle yeni bir satır yazdırmak istiyor, aksi takdirde bu "printf" benzeri bir davranış. Örneğin dpkg-query --showformat='${Version}\n' --show python3-lxml,.
Chris Lamb,

25

dpkgKomutu kullanmıyor ancak apt-show-version Banshee yükleyin

Örnek:

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

15

Aneeshep'in bence dpkg kullanarak belirttiği en iyi cevap olduğunu düşünüyorum. Fakat bütünlük uğruna, işte başka bir yol:

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

Veya sadece sürüm numarası için:

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

1
Çıkışı apt-cache, geçerli yerel ayara bağlıdır. Mesela Almanya'da ihtiyacınız var grep 'Installiert:'. Bunu telafi etmek için, C.UTF-8komut dosyası yazarken her zaman Yerel ayarı kullanın . Ya birlikte LC_ALL=C.UTF-8; export LC_ALLsenaryonun başlangıcında ya da benzeri bir vaka-olay bazında bir şey için:LC_ALL=C.UTF-8 apt-cache policy network-manager | grep 'Installed:' | awk '{print $2}'
Tino

5

Yüklü bir paketin sürümünü dpkgaşağıdaki gibi bulmak için başka bir yöntem ,

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

Örnek:

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

Açıklama:

dpkg -lkomut tüm kurulu paketleri listeler. Bu standart çıktı awkkomuta girdi olarak verildi . awkStandart girişte karşılık gelen paket adını arar ( sütun 2 ), eğer bulursa sonra karşılık gelen satırı alır. Ve son olarak , paket sürümünü temsil eden ( sütun 3 ) değerini yazdırır .

$ 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

Yukarıdakilere göre, sütun 2 paket adını , sütun 3 paket sürümünü , sütun 4 mimariyi ve sütun 5 paket tanımını temsil eder .


Neden tüm paketleri dpkgönce kullanarak listelemeye sonra da awk'nin bunları tekrar filtrelemesine ihtiyacınız var? dpkg -l <package-name>
Listeyi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.