dpkgを使用してインストール済みパッケージのバージョン番号を確認するにはどうすればよいですか?


83

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が急増しているため、これらの文字列はますます長くなっています。もっと簡単な方法はありますか?

回答:


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

例えば:

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

サンプル出力:

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

dpkg --info package.deb動作しましたが、動作-sしませんでした
ツイスト梨

2
@Twisted Pear- dpkg --info package.debパッケージファイルでdpkg -s <packagename>動作し、パッケージ名で動作します-ファイルは不要です
レーン

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

2
複数のパッケージを照会するとき、私はお勧め:dpkg-query --showformat='${Package}\t${Version}\n' --show lsb-release coreutils ...
ThorSummoner

6
このバージョンは正確です(grepやcutは不要です)。
ゲットリ

1
ほぼ確実に改行を印刷したい、そうでなければこれは「printf」のような振る舞いです。たとえば、dpkg-query --showformat='${Version}\n' --show python3-lxml
クリスラム

25

dpkgコマンドではなくapt-show-versionsを使用しています bansheeをインストールする

例:

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

15

あなたの質問はdpkgの使用を指定しているので、aneeshepが最良の答えだと思います。しかし、完全を期すために、別の方法があります。

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

1
の出力はapt-cache、現在のロケールに依存します。たとえば、ドイツでは次のことが必要grep 'Installiert:'です。それを補うために、C.UTF-8スクリプト作成時には常にロケールを使用してください。どちらかとLC_ALL=C.UTF-8; export LC_ALLスクリプトの開始時など、ケースバイケースで何かのために:LC_ALL=C.UTF-8 apt-cache policy network-manager | grep 'Installed:' | awk '{print $2}'
ティノ

5

以下の方法でインストール済みパッケージのバージョンを見つける別の方法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)で対応するパッケージ名を検索し、見つかった場合は対応する行を取得します。最後に、実際にパッケージバージョンを表す(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はパッケージの説明を表します


最初にすべてのパッケージを一覧表示してからdpkgawkで再度フィルタリングする必要があるのはなぜですか?単一のパッケージのリストもリクエストできますdpkg -l <package-name>
。– gertvdijk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.