पीपीए से स्थापित किए गए सभी पैकेजों को कैसे सूचीबद्ध किया जाए?


23

मैंने अपने सिस्टम पर कई पीपीए से कई पैकेज स्थापित किए। मैं सभी स्थापित पैकेजों को सूचीबद्ध करना चाहता हूं जो लॉन्चपैड पीपीए से स्थापित हैं, न कि रिपॉजिटरी।

क्या यह कमांड-लाइन के माध्यम से संभव है?


संभव डुप्लिकेट? askubuntu.com/questions/43581/...
मिच

अलग है।
अविनाश राज

1
कमांड लाइन उपयोगिता नहीं है, लेकिन बहुत उपयोगी वाई पीपीए प्रबंधक है । PPAs से संकुल को सूचीबद्ध करता है, स्थापित करता है और हटाता है।
जोस

जवाबों:


23

निम्न कमांड पैकेज का नाम और उसका ppa देता है (यदि ppa से संस्थापित किया जाता है):

apt-cache policy $(dpkg --get-selections | grep -v deinstall$ | awk '{ print $1 }') | perl -e '@a = <>; $a=join("", @a); $a =~ s/\n(\S)/\n\n$1/g;  @packages = split("\n\n", $a); foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s}'

विवरण:

  • dpkg --get-selections के बाद केवल स्थापित संकुल देता है grep -v deinstall$
  • awk '{ print $1 }' केवल पैकेज का नाम देता है
  • perl -e '@a = <>; $a=join("", @a)' द्वारा लौटाई गई सभी पंक्तियों को संक्षिप्त करता है apt-cache policy
  • $a =~ s/\n(\S)/\n\n$1/g; प्रत्येक पैकेज अनुभाग के बीच एक नई रेखा जोड़ता है
  • @packages = split("\n\n", $a); एक पर्ल सरणी है जिसमें सभी पैकेज इन्फोस, एक पैकेज प्रति आइटम है।
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s} एक लूप है, जहां पैकेज और ppa मुद्रित होते हैं, यदि पॉलिसी में prio 500 के साथ एक ppa मिलता है।

संक्षिप्त उत्तर / कोड, निष्पादन के लिए लूओंग समय।
रादु राईडेनु

@ अविनाश: क्या आपने मेरे उत्तर की परीक्षा ली? यदि ऐसा है तो क्या आप इसे स्वीकार करने पर विचार कर सकते हैं? धन्यवाद।
सिल्वेन पिनेऊ


3

इस उत्तर और इस पोस्ट के अनुसार , आप निम्नलिखित सिस्टम कोड का उपयोग करके अपने सिस्टम पर स्थापित सभी PPA से सभी पैकेजों की एक सूची प्राप्त कर सकते हैं:

for APT in $(find /etc/apt/ -name \*.list); do
  grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do
    USER=$(echo $ENTRY | cut -d/ -f4)
    PPA=$(echo $ENTRY | cut -d/ -f5)
    awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' /var/lib/apt/lists/*$USER*$PPA*Packages
    done
done

और इस उत्तर के अनुसार , आप अपने सिस्टम में सभी इंस्टाल किए गए पैकेजों की एक सूची प्राप्त कर सकते हैं:

dpkg --get-selections | grep -v deinstall | cut -f1

अब, PPAs से स्थापित सभी पैकेजों की सूची प्राप्त करने के लिए इन दो विचारों को शामिल करें:

(for APT in $(find /etc/apt/ -name \*.list); do
  grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do
    USER=$(echo $ENTRY | cut -d/ -f4)
    PPA=$(echo $ENTRY | cut -d/ -f5)
    awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' /var/lib/apt/lists/*$USER*$PPA*Packages
    done
done; dpkg --get-selections | grep -v deinstall | cut -f1) | sort | awk 'dup[$0]++ == 1'

3

apt-cacheउदाहरण के लिए, स्थापित पैकेज के स्रोत का उपयोग करके जाँच की जा सकती है

$ apt-cache policy oracle-java7-installer

oracle-java7-installer:
  Installed: 7u51-0~webupd8~7
  Candidate: 7u51-0~webupd8~7
  Version table:
 *** 7u51-0~webupd8~7 0
        500 http://ppa.launchpad.net/webupd8team/java/ubuntu/ precise/main i386 Packages
        100 /var/lib/dpkg/status

आउटपुट apt-cache policy <package_name>में स्रोत होता है।

पीपीए से स्थापित पैकेजों की सूची प्राप्त करने के लिए व्यक्ति निम्नलिखित स्क्रिप्ट का उपयोग कर सकता है।

#!/bin/bash
echo "List of packages which are not installed from Ubuntu repository"
for i in `dpkg -l | grep "^ii" | awk '{print $2}'`
do
    j=`apt-cache policy "$i" | grep "ppa.launchpad.net"` 
    if [ $? -eq 0 ]; then
        echo "$i"
        #echo "$i $j"
    fi
done

1
यदि आप एक अलग दर्पण का चयन करते हैं तो यह काम नहीं करता है। उदाहरण के लिए मेरे पासgir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
सिल्वेन पिनेउ

इस मामले google-chrome-stableमें एक पीपीए से स्थापित नहीं है; इसका सिर्फ एक अलग भंडार है।
रादु राईडेनू

ठीक है, मैंने देखा। लेकिन आप वास्तव में खराब उदाहरण के साथ आए हैं जो नौसिखिए उपयोगकर्ताओं को यह सोचने के लिए बना सकता है कि यदि पैकेज उबंटू रिपॉजिटरी से नहीं है, तो पैकेज पीपीए से है। ओपी का सवाल पीपीए के बारे में है।
रादु राईडेनू

@ RaduRădeanu मुझे आपके अंक मिले और मेरी पोस्ट को संपादित किया। आप बिल्कुल सही हैं।
स्मारिका

अब बेहतर है, भले ही निष्पादन के लिए समय के साथ कोई समस्या है जो वास्तव में लूंग है।
रादु राईडेनु

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.