How can I find the version number of an installed package via dpkg?
I use the dpkg -l command to find out what version of a package I have installed. For example:
dpkg -l network-managerreturns the information on the package:
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 daemonAs you can see, it returns 0.8.3~git.20101118t223039 which is wrong because it truncates the version (I've picked a long one for the purpose of this question). The way I've solved this in the past is to pass a stupidly long COLUMNS argument to make it expand:
COLUMNS=200 dpkg -l network-managerwhich gives me the entire version number, but also a bunch of junk:
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 daemonNow I can see the full version number, which is 0.8.3~git.20101118t223039.d60a988-0ubuntu1.
I get the feeling that this is not the proper way to find the version number of an installed package. This never really was a problem in the past, but with the tacking on of "ubuntu" in the versions and the proliferation of PPAs these strings are getting longer and longer. Is there an easier way?
06 Answers
dpkg -s <packagename> | grep '^Version:'e. g.:
dpkg -s network-manager | grep '^Version:'Sample output:
Version: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2 3 dpkg-query --showformat='${Version}' --show python3-lxml 3 It's not using the dpkg command but apt-show-versions
Example:
$ apt-show-versions network-manager
network-manager/maverick uptodate 0.8.1+git.20100810t184654.ab580f4-0ubuntu2 1 I think aneeshep's is the best answer as your question specifies using dpkg. But for completeness sake, here's another way:
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 maverick/main i386 Packages 100 /var/lib/dpkg/statusOr for just the version number:
apt-cache policy network-manager | grep 'Installed:' | cut -c 14-
0.8.1+git.20100810t184654.ab580f4-0ubuntu2 1 Another method to find the version of an installed package via dpkg as below,
dpkg -l | awk '$2=="package-name" { print $3 }' Example:
$ dpkg -l | awk '$2=="network-manager" { print $3 }'
0.9.8.0-0ubuntu22Explanation:
dpkg -l command lists all the installed packages.This standard output was fed as input to the awk command.awk searches for the corresponding package name in the standard input(column 2) if it finds then it grabs the corresponding line. And finally prints the value of (column 3) which was actually represents the package version.
$ 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 DescriptionAccording to the above, column 2 represents the package name, column 3 represents the package version, column 4 represents the architecture and column 5 represents package description.
1The command apt -qq list <package-name> shows whether the package is installed and appears to return the full version number.
Example 1 – uses -qq
$ apt -qq list network-manager
network-manager/now 1.10.14-0ubuntu2 amd64 [installed,local]Example 2 – uses -qq and *
$ apt -qq list virtualbox-6*
virtualbox-6.0/unknown 6.0.24-139119~Ubuntu~bionic amd64
virtualbox-6.1/unknown,now 6.1.16-140961~Ubuntu~bionic amd64 [installed]Example 3 – uses -qqa
$ apt -qqa list keepassxc
keepassxc/bionic,now 2.6.2-1ppa1~bionic1 amd64 [installed]
keepassxc/bionic 2.3.1+dfsg.1-1 amd64