Wie kann ich alle Pakete auflisten, die ich aus einem bestimmten Repository installiert habe?

51

Wie kann ich alle Pakete auflisten, die ich aus einem bestimmten Repository installiert habe?

Wie kann ich alle installierten Pakete auflisten, die nicht im Ubuntu-Hauptarchiv verfügbar sind, und auch sehen, aus welchen Repositorys sie stammen? (Wenn ich die Antwort auf diese Frage wüsste, könnte ich diese Liste nach einem bestimmten PPA-Namen durchsuchen, um die Antwort auf meine erste Frage herauszufinden.)

Marius Gedminas
quelle
Da es (leider) kein Befehlszeilentool dafür zu geben scheint, akzeptiere ich eine der GUI-Antworten.
Marius Gedminas

Antworten:

24

Erweitern Sie das Element "Installierte Software" im Ubuntu Software Center. Sie sehen eine Liste aller verschiedenen Repositorys, die Sie aktiviert haben. Wenn Sie auf das Repo klicken, werden Ihnen die Pakete angezeigt, die Sie jeweils installiert haben.

Alt-Text

undetwas
quelle
Ich fürchte, diese Option ist nur in Ubuntu 10.10 verfügbar, oder fehlt mir etwas? In meinem Software Center werden unter diesem Menü keine Quellen angezeigt.
lovinglinux
2
In meiner Version habe ich oben eine Dropdown-Liste "Installiert". Wenn ich diese Option auswähle, kann ich die verschiedenen Quellen auswählen (Kern, für den Kauf, PPA ...)
Alexis Wilke
In Ubuntu 16.04 ist diese Seite nicht mehr verfügbar. Synaptic bietet jedoch eine ähnliche Funktion: Klicken Sie unten links auf "Ursprung".
Josh
26

Es scheint keine Aufzeichnungen über die Herkunft eines installierten Pakets zu geben.

Wenn Sie keine Probleme damit haben, den Speicherort zu ermitteln, von dem ein Paket mit demselben Namen heruntergeladen werden soll, ist dies über verfügbar apt-cache policy. Das folgende (ziemlich hässliche) Skript erledigt den Trick für mich:

LC_ALL=C dpkg-query --showformat='${Package}:${Status}\n' -W '*' \
  | fgrep ':install ok installed' \
  | cut -d: -f1 \
  | (while read pkg; do 
       inst_version=$(apt-cache policy $pkg \
                                | fgrep Installed: \
                                | awk '{ print $2 }'); 
       origin=$(apt-cache policy "$pkg" \
                          | fgrep " *** ${inst_version}" -C1 \
                          | tail -n 1 \
                          | cut -c12-); 
       echo $pkg $origin; 
     done)

Beachten Sie, dass es ziemlich zerbrechlich ist, da es Annahmen über die Ausgabe von macht apt-cache policy, die sich je nach Version ändern können ...

Riccardo Murri
quelle
Ja, das würde im Grunde bedeuten, ein Werkzeug von Grund auf neu zu schreiben. Und ich denke, das Parsen von / var / lib / apt / lists mit Perl oder Python wäre schneller und robuster.
Marius Gedminas
Funktioniert hier normal, 2018 :) Danke!
N0rbert
Ich habe eine ähnliche Lösung entwickelt, die unter Ubuntu und Debian getestet wurde.
Famzah
23

Öffnen Sie den Synaptic Package Manager und klicken Sie auf die Schaltfläche "Ursprung" unten in der linken Seitenleiste. Es wird Ihre Quellen auflisten. Wählen Sie eine Quelle aus, um die verfügbaren / installierten Pakete anzuzeigen.

lovinglinux
quelle
4

Dieses Skript listet Pakete auf, die in der PPA installiert und verfügbar sind:

#!/bin/sh
# Give PPA name as an argument, e.g. ppa:oibaf/graphics-drivers

name1="$(echo "$1"|cut -d: -f2|cut -d/ -f1)"
name2="$(echo "$1"|cut -d/ -f2)"

awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' \
/var/lib/apt/lists/*"$name1"*"$name2"*Packages |
xargs dpkg-query -W -f='${Status} ${Package}\n' 2>/dev/null  | awk '/^[^ ]+ ok installed/{print $4}'

Ich bewerben ich dies .

BTW Verwenden Sie zum Entfernen von PPA das Programm ppa-purge. Ich habe eine verbesserte Version davon erstellt hier .

jarno
quelle
3

Unter Quantal (12.10) muss das Leerzeichen in der Ursprungszeile entfernt werden.

LC_ALL=C dpkg-query --showformat='${Package}:${Status}\n' -W '*' \
 | fgrep ':install ok installed' \
 | cut -d: -f1 \
 | (while read pkg; do 
   inst_version=$(apt-cache policy $pkg \
                            | fgrep Installed: \
                            | cut -d: -f2-); 
   origin=$(apt-cache policy "$pkg" \
                      | fgrep " ***${inst_version}" -C1 \
                      | tail -n 1 \
                      | cut -c12-); 
   echo $pkg $origin; 
 done)
Graham Dunn
quelle