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.

설치된 패키지의 버전 번호를 찾는 올바른 방법이 아니라는 느낌이 듭니다. 이것은 과거에는 실제로 문제가되지 않았지만, 버전에서 "우분투"를 촉발하고 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하지는 않았지만
Twisted Pear

2
@Twisted Pear- dpkg --info package.deb패키지 파일에서 dpkg -s <packagename>작동, 패키지 이름 에서 작동-파일 필요 없음
lane

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

2
여러 패키지를 쿼리 할 때 다음을 제안합니다.dpkg-query --showformat='${Package}\t${Version}\n' --show lsb-release coreutils ...
ThorSummoner

6
나는이 버전이 정확하기 때문에 좋아합니다 (그렙이나 컷이 필요하지 않음).
guettli

1
거의 개행을 인쇄하고 싶을 것입니다. 그렇지 않은 경우는 "printf"와 같은 동작입니다. 예를 들면 다음과 같습니다 dpkg-query --showformat='${Version}\n' --show python3-lxml.
Chris Lamb

25

dpkg명령을 사용하지 않고 apt-show-versions 밴시 설치

예:

$ 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표준 입력 ( column 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는 패키지 설명을 나타냅니다 .


먼저 모든 패키지를 사용하여 나열한 dpkg다음 awk를 다시 필터링 해야하는 이유는 무엇 입니까? 단일 패키지에 대한 리스팅을 요청할 수도 있습니다.dpkg -l <package-name>
gertvdijk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.