Bagaimana saya bisa mendaftar semua paket yang saya instal dari repositori tertentu?

51

Bagaimana saya bisa mendaftar semua paket yang saya instal dari repositori tertentu?

Bagaimana saya bisa mendaftar semua paket yang diinstal yang tidak tersedia dari arsip utama Ubuntu, dan juga melihat dari mana mereka berasal? (Jika saya tahu jawaban untuk pertanyaan ini, saya dapat mengambil daftar itu untuk nama PPA tertentu untuk menemukan jawaban untuk pertanyaan pertama saya.)

Marius Gedminas
sumber
Karena sepertinya tidak ada alat baris perintah yang ada untuk ini (sayangnya), saya akan menerima salah satu jawaban GUI.
Marius Gedminas

Jawaban:

24

Perluas item "Perangkat Lunak Terpasang" di Pusat Perangkat Lunak Ubuntu. Anda akan melihat daftar semua repositori berbeda yang telah Anda aktifkan. Mengklik repo akan menunjukkan paket yang telah Anda instal dari masing-masing.

teks alternatif

andrewsomething
sumber
Saya khawatir pilihan itu hanya tersedia di Ubuntu 10.10 atau saya kehilangan sesuatu? Pusat Perangkat Lunak Saya tidak menampilkan sumber di bawah menu itu.
lovinglinux
2
Dalam versi saya, saya memiliki dropdown "Dipasang" di bagian atas. Ketika saya memilih opsi itu, saya dapat memilih berbagai sumber (inti, untuk pembelian, PPA ...)
Alexis Wilke
Di Ubuntu 16.04, halaman ini tidak lagi tersedia. Namun, sinaptik memiliki fitur serupa - klik "Asal" di kiri bawah.
Josh
26

Tampaknya tidak ada catatan tentang asal paket yang diinstal .

Jika Anda setuju untuk mendapatkan lokasi dari mana sebuah paket dengan nama yang sama akan diunduh, ini tersedia melalui apt-cache policy. Skrip berikut (agak jelek) membantu saya:

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)

Perhatikan bahwa ini cukup rapuh, karena membuat asumsi tentang output apt-cache policy, yang mungkin berubah di semua versi ...

Riccardo Murri
sumber
Ya, ini pada dasarnya berarti menulis alat dari awal. Dan saya pikir parsing / var / lib / apt / daftar dengan Perl atau Python akan lebih cepat dan lebih kuat.
Marius Gedminas
Bekerja dengan normal di sini, pada tahun 2018 :) Terima kasih!
N0rbert
Saya mengembangkan solusi serupa yang diuji pada Ubuntu dan Debian.
famzah
23

Buka Synaptic Package Manager dan klik tombol "Origin" di bagian bawah sidebar kiri. Ini akan mencantumkan sumber Anda. Pilih sumber untuk melihat paket yang tersedia / diinstal.

lovinglinux
sumber
4

Skrip ini mencantumkan paket yang diinstal dan tersedia di PPA:

#!/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}'

Saya menerapkan ini .

BTW Untuk menghapus PPA dari penggunaan, gunakan program ppa-purge; Saya telah membuat versi yang disempurnakan di sini .

jarno
sumber
3

Di bawah Quantal (12.10), spasi di garis asal perlu dihilangkan.

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
sumber