Як перелічити всі пакунки, встановлені з PPA?


23

Я встановив у своїй системі багато пакетів з багатьох PPA. Я хочу перелічити всі встановлені пакети, які встановлені з PPA-пакетів запуску, а не сховищами.

Це можливо за допомогою командного рядка?


Можливий дублікат? askubuntu.com/questions/43581/…
Мітч

Ніякий інший.
Авінаш Радж

1
Y PPA Manager не є утилітою командного рядка, але дуже корисною . Списки, встановлення та видалення пакетів з PPA.
Джос

Відповіді:


23

Наступна команда повертає ім'я пакета та його ppa (якщо встановлено з 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}'

Деталі:

  • dpkg --get-selections надає лише встановлені пакети після grep -v deinstall$
  • awk '{ print $1 }' повертає лише ім'я пакета
  • perl -e '@a = <>; $a=join("", @a)' об'єднує всі рядки, повернуті apt-cache policy
  • $a =~ s/\n(\S)/\n\n$1/g; додає новий рядок між кожним розділом пакету
  • @packages = split("\n\n", $a); являє собою масив perl, що містить усі пакунки, по одному пакету на предмет.
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s} являє собою цикл, де пакується пакет і ppa, якщо в політиці знайдено ppa з prio 500.

Коротка відповідь / код, довгий час виконання.
Radu Rădeanu

@Avinash: ти перевірив мою відповідь? якщо так, ви можете, будь ласка, прийняти це? Спасибі.
Сільвейн Пано


3

Відповідно до цієї відповіді та цієї публікації , ви можете отримати список усіх пакетів з усіх 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

Тепер приєднаємось до цих двох ідей, щоб отримати список усіх пакунків, які встановлені з 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'

3

Джерело встановленого пакета можна перевірити apt-cache, наприклад, наприклад

$ 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

Вихід apt-cache policy <package_name>містить джерело.

Можна використовувати наступний скрипт для отримання списку пакунків, встановлених із 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

1
Це не працює, якщо ви вибрали інше дзеркало. Наприклад, у менеgir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
Sylvain Pineau

У цьому випадку google-chrome-stableне встановлюється від PPA; він має просто окреме сховище.
Radu Rădeanu

Гаразд, я це бачив. Але ви прийшли з по-справжньому поганим прикладом, який може змусити початківців користувачів думати, що якщо пакет не з сховищ Ubuntu, то пакет із PPA. Питання ОП стосується ДПП.
Radu Rădeanu

@ RaduRădeanu Я отримав ваші бали та відредагував своє повідомлення. ви абсолютно праві.
souravc

Краще зараз, навіть якщо є проблема з часом на виконання, який є справді довгим.
Radu Rădeanu

1

Встановіть синаптичний . Потім ви можете переглядати пакунки за "походженням" або навіть будь-яким іншим спеціальним фільтром.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.