Bagaimana saya bisa menemukan nomor versi dari paket yang diinstal melalui dpkg?

83

Saya menggunakan dpkg -lperintah untuk mencari tahu versi paket apa yang telah saya instal. Sebagai contoh:

dpkg -l network-manager

mengembalikan informasi pada paket:

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

Seperti yang Anda lihat, ia mengembalikan 0.8.3~git.20101118t223039yang salah karena memotong versi (saya sudah memilih yang panjang untuk keperluan pertanyaan ini). Cara saya memecahkan ini di masa lalu adalah dengan mengajukan argumen COLUMNS yang sangat panjang untuk membuatnya berkembang:

COLUMNS=200 dpkg -l network-manager

yang memberi saya seluruh nomor versi, tetapi juga banyak sampah:

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

Sekarang saya dapat melihat nomor versi lengkap, yaitu 0.8.3~git.20101118t223039.d60a988-0ubuntu1.

Saya merasa bahwa ini bukan cara yang tepat untuk menemukan nomor versi dari paket yang diinstal. Ini tidak pernah benar-benar menjadi masalah di masa lalu, tetapi dengan penerapan "ubuntu" dalam versi dan proliferasi PPA, string ini semakin lama semakin panjang. Apakah ada cara yang lebih mudah?

Jorge Castro
sumber

Jawaban:

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

misalnya:

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

Output sampel:

Version: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
aneeshep
sumber
dpkg --info package.debbekerja, meskipun -stidak
Twisted Pear
2
@ Twisted Pear - dpkg --info package.debberoperasi pada file paket, dpkg -s <packagename>beroperasi pada nama paket - tidak ada file yang diperlukan
jalur
37
dpkg-query --showformat='${Version}' --show python3-lxml
DI
sumber
2
Saat menanyakan beberapa paket, saya sarankan:dpkg-query --showformat='${Package}\t${Version}\n' --show lsb-release coreutils ...
ThorSummoner
6
Saya suka versi ini, karena tepat (tidak grep atau dipotong diperlukan).
guettli
1
Hampir pasti ingin mencetak baris baru, kalau tidak, ini adalah perilaku "printf". Sebagai contoh dpkg-query --showformat='${Version}\n' --show python3-lxml,.
Chris Lamb
25

Itu tidak menggunakan dpkgperintah tetapi apt-show-versi Instal banshee

Contoh:

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

Saya pikir aneeshep adalah jawaban terbaik karena pertanyaan Anda menentukan menggunakan dpkg. Tapi demi kelengkapan, berikut ini cara lain:

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

Atau hanya untuk nomor versi:

apt-cache policy network-manager | grep 'Installed:' | cut -c 14-
0.8.1+git.20100810t184654.ab580f4-0ubuntu2
andrewsomething
sumber
1
Output dari apt-cachetergantung pada Lokal saat ini. Misalnya di Jerman Anda perlu grep 'Installiert:'. Untuk mengimbanginya, selalu gunakan Lokal C.UTF-8saat membuat skrip. Entah dengan LC_ALL=C.UTF-8; export LC_ALLdi awal skrip atau untuk kasus per kasus sesuatu seperti:LC_ALL=C.UTF-8 apt-cache policy network-manager | grep 'Installed:' | awk '{print $2}'
Tino
5

Metode lain untuk menemukan versi paket yang diinstal melalui dpkgseperti di bawah ini,

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

Contoh:

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

Penjelasan:

dpkg -lperintah mencantumkan semua paket yang diinstal. Output standar ini dimasukkan sebagai input ke awkperintah. awkmencari nama paket yang sesuai di input standar ( kolom 2 ) jika ditemukan kemudian mengambil baris yang sesuai. Dan akhirnya mencetak nilai ( kolom 3 ) yang sebenarnya mewakili versi paket.

$ 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

Menurut yang di atas, kolom 2 mewakili nama paket , kolom 3 mewakili versi paket , kolom 4 mewakili arsitektur dan kolom 5 mewakili deskripsi paket .

Avinash Raj
sumber
Mengapa Anda perlu mendaftar semua paket menggunakan dpkgterlebih dahulu dan kemudian awk menyaringnya lagi? Anda dapat meminta daftar untuk satu paket juga:dpkg -l <package-name>
gertvdijk