Как перечислить все пакеты, установленные из PPA?

20

Я установил много пакетов из многих PPA в моей системе. Я хочу перечислить все установленные пакеты, которые установлены из PPA пусковой панели, а не репозитории.

Возможно ли это с помощью командной строки?

    
задан Avinash Raj 13.04.2014 в 08:40
источник

4 ответа

17

Следующая команда возвращает имя пакета и его 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.
ответ дан Sylvain Pineau 13.04.2014 в 12:22
5

В приведенной ниже команде показаны установленные пакеты для активных PPA в sources.list

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

Ссылка: aptitude - ссылка на поисковый запрос

    
ответ дан user.dz 01.05.2017 в 19:40
3

В соответствии с этим ответом и этот пост , вы можете получить список всех пакетов из всех PPA, установленных в вашей системе, используя следующий код 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

И в соответствии с этим ответом вы можете получить список всех установленных пакетов в вашей системе, используя:

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

Теперь давайте присоединимся к этим двум идеям, чтобы получить список всех пакетов, которые установлены из PPAs:

(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 13.04.2014 в 13:36
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
    
ответ дан souravc 13.04.2014 в 11:39