Como listar todos os pacotes que são instalados dos PPAs?

20

Eu instalei muitos pacotes de muitos PPAs no meu sistema. Quero listar todos os pacotes instalados que são instalados a partir de PPAs da barra de ativação, não de repositórios.

Isso é possível através da linha de comando?

    
por Avinash Raj 13.04.2014 / 10:40

4 respostas

17

O seguinte comando retorna o nome do pacote e seu ppa (se instalado a partir de um 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}'

Detalhes:

  • dpkg --get-selections fornece apenas os pacotes instalados após grep -v deinstall$
  • awk '{ print $1 }' retorna apenas o nome do pacote
  • perl -e '@a = <>; $a=join("", @a)' concatena todas as linhas retornadas por apt-cache policy
  • $a =~ s/\n(\S)/\n\n$1/g; adiciona uma nova linha entre cada seção do pacote
  • @packages = split("\n\n", $a); é uma matriz perl contendo todos os pacotes infos, um pacote por item.
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s} é um loop onde o pacote e o ppa são impressos se um ppa com o prio 500 for encontrado na política.
por Sylvain Pineau 13.04.2014 / 14:22
5

O comando abaixo mostra pacotes instalados para PPAs ativos em sources.list

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

Referência: aptitude - Referência do termo de pesquisa

    
por user.dz 01.05.2017 / 21:40
3

De acordo com esta resposta e este post , você pode obter uma lista de todos os pacotes de todos os PPAs instalados no seu sistema usando o seguinte código 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

E, de acordo com esta resposta , você pode obter uma lista de todos os pacotes instalados em seu sistema usando:

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

Agora, vamos unir essas duas ideias para obter uma lista de todos os pacotes instalados dos 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'
    
por Radu Rădeanu 13.04.2014 / 15:36
3

A origem de um pacote instalado pode ser verificada usando apt-cache , por exemplo

$ 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

A saída de apt-cache policy <package_name> contém a origem.

Pode-se usar o seguinte script para obter a lista de pacotes instalados dos PPAs.

#!/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
    
por souravc 13.04.2014 / 13:39