Bagaimana cara membuat daftar semua paket yang diinstal dari PPA?

23

Saya menginstal banyak paket dari banyak PPA di sistem saya. Saya ingin mendaftar semua paket yang diinstal yang diinstal dari PPA launchpad, bukan repositori.

Apakah ini mungkin melalui command-line?

Avinash Raj
sumber
Kemungkinan Gandakan? askubuntu.com/questions/43581/…
Mitch
Tidak. Itu berbeda.
Avinash Raj
1
Bukan utilitas baris perintah, tetapi sangat berguna adalah Y PPA Manager . Daftar, instal, dan hapus paket dari PPA.
Jos
Dari PPA yang diberikan: askubuntu.com/questions/5976/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

23

Perintah berikut mengembalikan nama paket dan ppa-nya (jika diinstal dari 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}'

Detail:

  • dpkg --get-selections hanya memberikan paket yang diinstal setelah grep -v deinstall$
  • awk '{ print $1 }' hanya mengembalikan nama paket
  • perl -e '@a = <>; $a=join("", @a)' menyatukan semua baris yang dikembalikan oleh apt-cache policy
  • $a =~ s/\n(\S)/\n\n$1/g; menambahkan baris baru antara setiap bagian paket
  • @packages = split("\n\n", $a); adalah array perl yang berisi semua paket info, satu paket per item.
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s} adalah loop di mana paket dan ppa dicetak jika ppa dengan prio 500 ditemukan dalam polis.
Sylvain Pineau
sumber
Jawaban singkat / kode, waktu looong untuk eksekusi.
Radu Rădeanu
@Avinash: apakah Anda menguji jawaban saya? Jika demikian, bisakah Anda mempertimbangkan untuk menerimanya? Terima kasih.
Sylvain Pineau
7

aptitudeperintah di bawah ini menunjukkan daftar paket yang diinstal untuk PPA aktif di sources.list.

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

Referensi: aptitude - Referensi istilah pencarian

user.dz
sumber
1
Kemampuan Keren Lain untuk aptitude +1
Ravexina
3

Sesuai dengan jawaban ini dan posting ini , Anda bisa mendapatkan daftar semua paket dari semua AKP yang diinstal pada sistem Anda menggunakan kode bash berikut:

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

Dan sesuai dengan jawaban ini , Anda bisa mendapatkan daftar semua paket yang diinstal di sistem Anda menggunakan:

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

Sekarang, mari bergabung dengan dua ide ini untuk mendapatkan daftar semua paket yang diinstal dari 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
sumber
3

Sumber paket yang diinstal dapat diperiksa menggunakan apt-cache, misalnya

$ 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

Output apt-cache policy <package_name>berisi sumber.

Seseorang dapat menggunakan skrip berikut untuk mendapatkan daftar paket yang diinstal dari 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
sumber
1
Ini tidak berfungsi jika Anda memilih cermin yang berbeda. Misalnya saya punyagir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
Sylvain Pineau
Dalam hal google-chrome-stableini tidak diinstal dari PPA; hanya memiliki repositori terpisah.
Radu Rădeanu
Ok, saya melihat itu. Tapi Anda datang dengan contoh yang sangat buruk yang dapat membuat pengguna pemula berpikir bahwa jika suatu paket bukan dari repositori Ubuntu, maka paket tersebut dari PPA. Pertanyaan OP adalah tentang PPA.
Radu Rădeanu
@ RaduRădeanu Saya mendapatkan poin Anda dan Mengedit posting saya. Anda benar sekali.
souravc
Lebih baik sekarang, bahkan jika ada masalah dengan waktu eksekusi yang benar-benar looong.
Radu Rădeanu
1

Instal sinaptik . Anda kemudian dapat menelusuri paket dengan "asal" atau bahkan filter kustom lainnya.

ilias iliadis
sumber