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?

Avinash Raj
quelle
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
Von einem gegebenen PPA: askubuntu.com/questions/5976/…
Ciro Santilli

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.
Sylvain Pineau
quelle
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
7

aptitudeBefehl unten zeigt Liste der installierten Pakete für aktive PPAs in sources.list.

aptitude search '?narrow(?installed, ~Oppa)'

Referenz: aptitude - Suchbegriffreferenz

user.dz
quelle
1
Eine weitere coole Fähigkeit von aptitude +1
Ravexina
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'
Radu Rădeanu
quelle
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
souravc
quelle
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.

ilias iliadis
quelle