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

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

Действительно ли это возможно через командную строку?

26
задан 13 April 2014 в 17:38

5 ответов

Следующая команда возвращает имя пакета и его 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
  • $ a = ~ s / \ n (\ S) / \ n \ n $ 1 / g; добавляет новую строку между каждым разделом пакета
  • @packages = split ("\ n \ n", $ a); - это массив perl, содержащий всю информацию о пакетах, по одному пакету на элемент.
  • foreach $ p (@packages) {выведите "$ 1: $ 2 \ n", если $ p = ~ /^(.*?):.*?500 http: \ / \ / ppa \ .launchpad \ .net \ / (. *?) \ s / s} - это цикл, в котором печатаются пакет и ppa, если в политике найден ppa с приоритетом 500.
25
ответ дан 16 November 2019 в 12:19
8
ответ дан 16 November 2019 в 12:19

Источник установленного пакета можно проверить с помощью 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 содержит исходный код.

Для получения списка пакетов, установленных из 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
3
ответ дан 16 November 2019 в 12:19

Установить синаптический . Затем вы можете просматривать пакеты по "происхождению" или даже по любому другому настраиваемому фильтру.

2
ответ дан 16 November 2019 в 12:19

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

Теперь давайте объединим эти две идеи, чтобы получить список всех пакетов, установленных из 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
ответ дан 23 November 2019 в 01:27

Другие вопросы по тегам:

Похожие вопросы: