Jak wyświetlić listę wszystkich pakietów zainstalowanych z PPA?

23

W moim systemie zainstalowałem wiele pakietów z wielu umów PPA. Chcę wyświetlić listę wszystkich zainstalowanych pakietów, które są instalowane z PPA startera, a nie repozytoriów.

Czy jest to możliwe za pomocą wiersza polecenia?

Avinash Raj
źródło
Możliwy duplikat? askubuntu.com/questions/43581/…
Mitch
Nie. Jest inny.
Avinash Raj
1
Nie narzędzie wiersza poleceń, ale bardzo przydatne jest Y PPA Manager . Wyświetla, instaluje i usuwa pakiety z umów PPA.
Jos
Z danego PPA: askubuntu.com/questions/5976/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

23

Następujące polecenie zwraca nazwę pakietu i jego ppa (jeśli jest zainstalowany z 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}'

Detale:

  • dpkg --get-selections daje tylko zainstalowane pakiety po grep -v deinstall$
  • awk '{ print $1 }' zwraca tylko nazwę pakietu
  • perl -e '@a = <>; $a=join("", @a)' łączy wszystkie wiersze zwrócone przez apt-cache policy
  • $a =~ s/\n(\S)/\n\n$1/g; dodaje nowy wiersz między każdą sekcją pakietu
  • @packages = split("\n\n", $a); to tablica perla zawierająca wszystkie informacje o pakietach, po jednej paczce na element.
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s} to pętla, w której pakiet i ppa są drukowane, jeśli w polisie znaleziono ppa z prio 500.
Sylvain Pineau
źródło
Krótka odpowiedź / kod, długi czas na wykonanie.
Radu Rădeanu
@Avinash: przetestowałeś moją odpowiedź? jeśli tak, czy możesz to zaakceptować? Dzięki.
Sylvain Pineau
7

aptitudeponiższe polecenie wyświetla listę zainstalowanych pakietów dla aktywnych PPA w sources.list.

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

Odniesienie: aptitude - Odwołanie do wyszukiwanego hasła

user.dz
źródło
1
Kolejna aptitude
fajna
3

Zgodnie z tą odpowiedzią i tym postem możesz uzyskać listę wszystkich pakietów ze wszystkich PPA zainstalowanych w twoim systemie, używając następującego kodu bash:

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

I zgodnie z tą odpowiedzią , możesz uzyskać listę wszystkich zainstalowanych pakietów w twoim systemie używając:

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

Teraz dołączmy do tych dwóch pomysłów, aby uzyskać listę wszystkich pakietów zainstalowanych z 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'
Radu Rădeanu
źródło
3

Źródło zainstalowanego pakietu można sprawdzić apt-cachena przykład za pomocą

$ 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

Dane wyjściowe apt-cache policy <package_name>zawiera źródło.

Można użyć następującego skryptu, aby uzyskać listę pakietów zainstalowanych z 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
souravc
źródło
1
Nie działa, jeśli wybrałeś inne lustro. Na przykład mamgir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
Sylvain Pineau
W takim przypadku google-chrome-stablenie jest instalowany z PPA; ma tylko oddzielne repozytorium.
Radu Rădeanu
Ok, widziałem to. Ale przyszedłeś ze naprawdę złym przykładem, który może sprawić, że początkujący użytkownicy będą myśleć, że jeśli pakiet nie pochodzi z repozytoriów Ubuntu, to pakiet pochodzi z PPA. Pytanie PO dotyczy PPA.
Radu Rădeanu
@ RaduRădeanu Mam twoje punkty i edytowałem mój post. masz absolutną rację.
souravc
Lepiej teraz, nawet jeśli występuje problem z czasem wykonania, który jest naprawdę długi.
Radu Rădeanu
1

Zainstaluj synaptic . Następnie możesz przeglądać paczki według „pochodzenia” lub nawet dowolnego niestandardowego filtra.

ilias iliadis
źródło