Jak mogę wyświetlić listę wszystkich pakietów, które zainstalowałem z określonego repozytorium?

51

Jak mogę wyświetlić listę wszystkich pakietów, które zainstalowałem z określonego repozytorium?

Jak mogę wyświetlić listę wszystkich zainstalowanych pakietów, które nie są dostępne z głównych archiwów Ubuntu, a także zobaczyć, z których repozytoriów pochodzą? (Gdybym znał odpowiedź na to pytanie, mógłbym przeszukać tę listę dla konkretnej nazwy PPA, aby znaleźć odpowiedź na moje pierwsze pytanie).

Marius Gedminas
źródło
Ponieważ wydaje się, że nie ma w tym celu narzędzia wiersza poleceń (niestety), zaakceptuję jedną z odpowiedzi GUI.
Marius Gedminas

Odpowiedzi:

24

Rozwiń pozycję „Zainstalowane oprogramowanie” w Centrum oprogramowania Ubuntu. Zobaczysz listę wszystkich różnych repozytoriów, które włączyłeś. Kliknięcie repo pokaże pakiety, które zainstalowałeś z każdego z nich.

alternatywny tekst

andrews coś
źródło
Obawiam się, że ta opcja jest dostępna tylko w Ubuntu 10.10, czy coś mi brakuje? Moje Centrum oprogramowania nie wyświetla źródeł poniżej tego menu.
lovinglinux
2
W mojej wersji mam menu „Zainstalowane” u góry. Kiedy wybiorę tę opcję, mogę wybrać różne źródła (rdzeń, do zakupu, PPA ...)
Alexis Wilke,
W Ubuntu 16.04 ta strona nie jest już dostępna. Jednak synaptic ma podobną funkcję - kliknij „Pochodzenie” w lewym dolnym rogu.
Josh
26

Wydaje się, że nie ma zapisu pochodzenia zainstalowanego pakietu.

Jeśli nie masz nic przeciwko uzyskaniu lokalizacji, z której można pobrać pakiet o tej samej nazwie, jest to możliwe poprzez apt-cache policy. Poniższy (raczej brzydki) skrypt załatwia sprawę:

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)

Pamiętaj, że jest dość delikatny, ponieważ przyjmuje założenia dotyczące wyników apt-cache policy, które mogą się zmieniać w różnych wersjach ...

Riccardo Murri
źródło
Tak, to w zasadzie oznaczałoby napisanie narzędzia od zera. I myślę, że parsowanie / var / lib / apt / list za pomocą Perla lub Pythona byłoby szybsze i bardziej niezawodne.
Marius Gedminas
Działa normalnie tutaj, w 2018 roku :) Dziękujemy!
N0rbert,
Opracowałem podobne rozwiązanie przetestowane na Ubuntu i Debianie.
famzah
23

Otwórz Menedżera pakietów Synaptic i kliknij przycisk „Początek” u dołu lewego paska bocznego. Spowoduje to wyświetlenie listy źródeł. Wybierz źródło, aby zobaczyć dostępne / zainstalowane pakiety.

lovinglinux
źródło
4

Ten skrypt wyświetla pakiety, które są zainstalowane i dostępne w 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}'

Zastosowałem to .

BTW Jeśli chodzi o usuwanie PPA z użycia, użyj programu ppa-purge; Stworzyłem ulepszoną wersję nim tutaj .

jarno
źródło
3

Pod Quantal (12.10) należy usunąć spację w linii początkowej.

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
źródło