मैं 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" से निपटने और पीपीए के प्रसार के साथ ये तार लंबे और लंबे हो रहे हैं। क्या कोई आसान तरीका है?

जवाबों:


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 नाशपाती - 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 या कट की आवश्यकता नहीं)।
गुएटली

1
लगभग निश्चित रूप से एक नई लाइन प्रिंट करना चाहते हैं, अन्यथा यह "प्रिंटफ" जैसा व्यवहार है। उदाहरण के लिए, dpkg-query --showformat='${Version}\n' --show python3-lxml
क्रिस लैंब


15

मुझे लगता है कि अनीशेप सबसे अच्छा उत्तर है क्योंकि आपका प्रश्न dpkg का उपयोग करता है। लेकिन पूर्णता के लिए, यहाँ एक और तरीका है:

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}'
Tino

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 ) में संबंधित पैकेज के नाम को खोजता है अगर यह पाता है तो यह संबंधित लाइन को पकड़ लेता है। और अंत में ( कॉलम 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.