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?
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?
Respostas:
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 pacoteperl -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.aptitude
O comando abaixo mostra a lista de pacotes instalados para PPAs ativos em sources.list
.
aptitude search '?narrow(?installed, ~Oppa)'
Referência: aptitude - Referência de termos de pesquisa
aptitude
+1
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'
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
gir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
google-chrome-stable
não é instalado a partir de um PPA; possui apenas um repositório separado.
Instale o sináptico . Você pode procurar pacotes por "origem" ou mesmo qualquer outro filtro personalizado.