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?
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?
Antworten:
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ückperl -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.aptitude
Befehl unten zeigt Liste der installierten Pakete für aktive PPAs in sources.list
.
aptitude search '?narrow(?installed, ~Oppa)'
Referenz: aptitude - Suchbegriffreferenz
aptitude
+1
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'
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
gir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
google-chrome-stable
wird nicht von einer PPA installiert; Es hat nur ein separates Repository.
Installieren Sie synaptic . Sie können Pakete dann nach "Ursprung" oder einem beliebigen anderen benutzerdefinierten Filter durchsuchen.