Como listar todos os pacotes instalados pelos PPAs?


23

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

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



Não. É diferente.
Avinash Raj

11
Não é um utilitário de linha de comando, mas muito útil é o Y PPA Manager . Lista, instala e remove pacotes dos PPAs.
21713 Jos

Respostas:


23

O comando a seguir 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 que contém todas as informações dos pacotes, um pacote por item.
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s} é um loop em que o pacote e o ppa são impressos se um ppa com prio 500 for encontrado na política.

Resposta / código curto, muito tempo para execução.
Radu Rădeanu

@Avinash: você testou minha resposta? Em caso afirmativo, você poderia aceitá-lo? Obrigado.
19414 Sylvain Pineau


3

De acordo com esta resposta e esta postagem , você pode obter uma lista de todos os pacotes de todos os PPAs instalados no seu sistema usando o seguinte código de base:

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 no seu sistema usando:

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

Agora, vamos juntar essas duas idéias para obter uma lista de todos os pacotes instalados nos 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'

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 fonte.

Pode-se usar o script a seguir para obter a lista de pacotes instalados pelos 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

11
Não funciona se você selecionou um espelho diferente. Por exemplo, eu tenhogir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
Sylvain Pineau 13/14

Nesse caso, google-chrome-stablenão é instalado a partir de um PPA; possui apenas um repositório separado.
Radu Rădeanu

Ok, eu vi isso. Mas você veio com um exemplo muito ruim, que pode fazer com que usuários iniciantes pensem que, se um pacote não for dos repositórios do Ubuntu, o pacote será de um PPA. A pergunta do OP é sobre CAE.
Radu Rădeanu

@ RaduRădeanu Consegui seus pontos e editei meu post. você está absolutamente correto.
souravc

Melhor agora, mesmo se houver um problema com o tempo de execução que é realmente muito longo.
Radu Rădeanu

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.