Wie liste ich alle Pakete auf, die von PPAs installiert wurden?


23

Ich habe viele Pakete von vielen PPAs auf meinem System installiert. Ich möchte alle installierten Pakete auflisten, die von Launchpad-PPAs installiert werden, nicht von Repositorys.

Ist das über die Kommandozeile möglich?


Mögliches Duplizieren? askubuntu.com/questions/43581/…
Mitch

Nein, es ist eine andere.
Avinash Raj

1
Kein Befehlszeilenprogramm, aber sehr nützlich ist der Y PPA Manager . Listet Pakete auf, installiert sie und entfernt sie aus PPAs.
Jos

Antworten:


23

Der folgende Befehl gibt den Paketnamen und sein ppa zurück (falls von einem ppa installiert):

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

Einzelheiten:

  • dpkg --get-selections gibt nur die installierten pakete nach grep -v deinstall$
  • awk '{ print $1 }' gibt nur den Paketnamen zurück
  • perl -e '@a = <>; $a=join("", @a)' verkettet alle von zurückgegebenen Zeilen apt-cache policy
  • $a =~ s/\n(\S)/\n\n$1/g; fügt zwischen jedem Paketabschnitt eine neue Zeile ein
  • @packages = split("\n\n", $a); ist ein Perl-Array, das alle Paketinformationen enthält, ein Paket pro Artikel.
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s} ist eine Schleife, in der das Paket und der PPA gedruckt werden, wenn ein PPA mit Prio 500 in der Richtlinie gefunden wird.

Kurze Antwort / Code, lange Ausführungszeit.
Radu Rădeanu

@Avinash: hast du meine Antwort getestet? Wenn ja, können Sie dies akzeptieren? Vielen Dank.
Sylvain Pineau


3

In Übereinstimmung mit dieser Antwort und diesem Beitrag können Sie eine Liste aller Pakete von allen auf Ihrem System installierten PPAs mit dem folgenden Bash-Code abrufen:

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

Entsprechend dieser Antwort können Sie eine Liste aller in Ihrem System installierten Pakete abrufen, indem Sie Folgendes verwenden:

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

Lassen Sie uns nun diese beiden Ideen zusammenfassen, um eine Liste aller Pakete zu erhalten, die von PPAs installiert werden:

(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

Die Quelle eines installierten Paket kann unter Verwendung geprüft werden apt-cache, zum Beispiel

$ 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

Die Ausgabe von apt-cache policy <package_name>enthält die Quelle.

Sie können das folgende Skript verwenden, um die Liste der von PPAs installierten Pakete abzurufen.

#!/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
Es funktioniert nicht, wenn Sie einen anderen Spiegel ausgewählt haben. Zum Beispiel habe ichgir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
Sylvain Pineau

In diesem Fall google-chrome-stablewird nicht von einer PPA installiert; Es hat nur ein separates Repository.
Radu Rădeanu

Ok, das habe ich gesehen. Aber Sie haben ein wirklich schlechtes Beispiel gefunden, das Anfänger zu der Annahme veranlassen kann, dass ein Paket von einem PPA stammt, wenn es nicht aus Ubuntu-Repositorys stammt. Die Frage des OP betrifft PPAs.
Radu Rădeanu

@ RaduRădeanu Ich habe deine Punkte bekommen und meinen Beitrag bearbeitet. Sie sind absolut richtig.
Souravc

Besser jetzt, auch wenn es ein Problem mit der Ausführungszeit gibt, das sehr lang ist.
Radu Rădeanu

1

Installieren Sie synaptic . Sie können Pakete dann nach "Ursprung" oder einem beliebigen anderen benutzerdefinierten Filter durchsuchen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.