J'ai installé de nombreux packages provenant de nombreux PPA sur mon système. Je veux répertorier tous les packages installés qui sont installés à partir des PPA du tableau de bord, pas les référentiels.
Est-ce possible via la ligne de commande?
J'ai installé de nombreux packages provenant de nombreux PPA sur mon système. Je veux répertorier tous les packages installés qui sont installés à partir des PPA du tableau de bord, pas les référentiels.
Est-ce possible via la ligne de commande?
Réponses:
La commande suivante renvoie le nom du package et son ppa (s'il est installé à partir d'un 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}'
Détails:
dpkg --get-selections
ne donne que les packages installés après grep -v deinstall$
awk '{ print $1 }'
renvoie uniquement le nom du packageperl -e '@a = <>; $a=join("", @a)'
concatène toutes les lignes renvoyées par apt-cache policy
$a =~ s/\n(\S)/\n\n$1/g;
ajoute une nouvelle ligne entre chaque section de package@packages = split("\n\n", $a);
est un tableau Perl contenant toutes les informations sur les packages, un package par élément.foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s}
est une boucle où le paquet et le ppa sont imprimés si un ppa avec prio 500 est trouvé dans la politique.aptitude
La commande ci-dessous affiche la liste des packages installés pour les PPA actifs dans sources.list
.
aptitude search '?narrow(?installed, ~Oppa)'
Référence: aptitude - Référence du terme recherché
aptitude
Conformément à cette réponse et à ce message , vous pouvez obtenir une liste de tous les packages de tous les PPA installés sur votre système en utilisant le code bash suivant:
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
Et conformément à cette réponse , vous pouvez obtenir une liste de tous les packages installés dans votre système en utilisant:
dpkg --get-selections | grep -v deinstall | cut -f1
Maintenant, joignons ces deux idées pour obtenir une liste de tous les packages installés à partir des 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) | sort | awk 'dup[$0]++ == 1'
La source d'un paquet installé peut être vérifiée en utilisant apt-cache
, par exemple
$ 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
La sortie de apt-cache policy <package_name>
contient la source.
On peut utiliser le script suivant pour obtenir la liste des packages installés à partir des PPA.
#!/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
n'est pas installé à partir d'un PPA; il a juste un référentiel séparé.
Installez synaptique . Vous pouvez ensuite parcourir les packages par "origine" ou même tout autre filtre personnalisé.