Encontre pacotes instalados a partir de um determinado repositório com o aptitude

38

Estou em busca de algo analógico para essa pergunta: Zypper: Como eu exibo todos os pacotes de um determinado repositório?

Como estou no Ubuntu, preciso de uma solução baseada em aptitude: Como posso obter uma lista de pacotes instalados de um determinado repositório?

    
por Boldewyn 18.04.2010 / 19:40

7 respostas

17

Usando o aptitude, para procurar por pacotes instalados fora do ramo estável, você pode usar:

aptitude search "?narrow(?installed,?not(?archive(stable)))"

Para ver as versões, bem como os nomes de pacotes (e, em vez de descrições), você pode usar o comando com a opção de formatação ( -F para breve), da seguinte forma.

aptitude search -F "%p %V %v" "?narrow(?installed,?not(?archive(stable)))"

Para mais formatos, consulte a página de manual (aqui está documentação com opções de disponibilidade ).

Isso funciona, por exemplo, no Debian se você instalou pacotes fora do Squeeze (executando, por exemplo, apt-get install -t sid package-name .

Você pode procurar de onde vem um pacote instalado via apt-cache policy , o uso é o seguinte:

apt-cache policy <package-name>

Por exemplo, meu pacote python-numpy processa a seguinte saída:

$ LANG=C apt-cache policy python-numpy
python-numpy:
  Installed: 1:1.6.2-1
  Candidate: 1:1.6.2-1.2
  Version table:
     1:1.7.0-1 0
          1 http://ftp.es.debian.org/debian/ experimental/main amd64 Packages
     1:1.6.2-1.2 0
        500 http://ftp.es.debian.org/debian/ sid/main amd64 Packages
 *** 1:1.6.2-1 0
        100 /var/lib/dpkg/status
     1:1.4.1-5 0
        990 http://ftp.es.debian.org/debian/ squeeze/main amd64 Packages
        990 http://ftp.de.debian.org/debian/ squeeze/main amd64 Packages

Isso significa que eu sou uma versão atrás da ramificação do sid / main atual, então eu tenho uma versão antiga do sid instalada. Vejo que não tenho o estável porque ainda é 1.4.1-5 e atualmente estou em 1.6.2-1 .

No momento da apresentação, este pacote já foi atualizado:)

    
por 26.03.2013 / 18:07
18

Depois de ler a página de informações do aptitude e uma dúzia de tentativas, finalmente consegui:

aptitude search '?narrow(?installed,?not(?archive(testing)) ?archive(unstable))'

ou (equivalente):

aptitude search '~S ~i (!~Atesting ~Aunstable)'

Ele procurará pacotes instalados a partir de arquivos instáveis de qualquer repositório . Você tem que filtrar os pacotes do seu arquivo padrão (testando no exemplo acima).

Se você quiser filtrar pacotes instalados em www.debian-multimedia.org/unstable:

aptitude search '~S ~i (!~Atesting ~Aunstable ?origin("Unofficial Multimedia Packages"))

Editar: "Arquivo", "origem" etc. são deduzidos do arquivo Release do repositório. Infelizmente nem todas as ferramentas podem olhar para todas essas linhas e usam uma sintaxe diferente para elas. Você pode encontrar esses arquivos como /var/lib/apt/lists/*Release . Ou apenas digite apt-cache policy para obter uma visão geral. O apt-cache mudou seu formato de saída: versões posteriores usam o estilo apt_preferences.

  • Suite: ou Archive: (nome antigo!)
    • pesquisa do aptitude: ?archive(___) ou ~A___
    • formato do aptitude: %t
    • apt_preferences: release a=___
    • Exemplos do Ubuntu: natty-backports , trusty-security , stable
  • %código%
    • pesquisa do aptitude: Origin: ou ?origin(___)
    • formato do aptitude: n / a
    • apt_preferences: ~O___
    • Exemplos do Ubuntu: release o=___ , Canonical , Google, Inc. , LP-PPA-dockbar-main
  • todas as outras linhas
    • aptitude: n / a
por 07.05.2010 / 15:36
15

Examine a tag de origem (como o = Debian ) para cada um dos seus repositórios atuais:

apt-cache policy | sed -n 's/.*o=\([^,]\+\).*//p' | uniq

Em seguida, pesquise por pacotes de (ou não de) uma origem específica:

aptitude search "?installed?origin(Debian)"
aptitude search "?installed?not(?origin(Debian))"

Isso não é adequado para uma auditoria de segurança porque depende de cada repositório para fornecer suas próprias informações de origem, mas pode ser útil para solucionar problemas de origem de pacotes presentes em vários repositórios. / p>     

por 18.10.2010 / 01:29
6

Para completar: Nos sistemas Ubuntu você pode usar o Synaptic para esta tarefa também. Na coluna da esquerda, você pode filtrar pacotes pela sua origem.

    
por 20.04.2010 / 20:46
2

Eu encontrei isto:

aptitude search "?origin (<repository>) ?installed"

Você também pode encontrar uma lista de termos de pesquisa compatíveis com "pesquisa do aptitude" aqui .

    
por 11.06.2010 / 15:12
2

Primeiro, encontre os arquivos apropriados para o repositório de interesse em / var / lib / apt / lists. Deveria ser possível fazer isso programaticamente, mas não precisei fazer isso.

Usando o Google Chrome como exemplo, tente isto:

SEARCH_PATTERN=dl.google.com_linux_chrome  # adjust to suit your needs

for PKG in $( grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages | sed 's/^Package: //' )
do
    if dpkg -s "${PKG}" 2> /dev/null 1> /dev/null
    then
        echo ${PKG}
    fi
done

e eu recebo a saída:

google-chrome-stable

dpkg -s retorna 0 se o pacote estiver instalado e diferente de zero. Para fins de referência futura, a saída de

grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages

foi

Package: google-chrome-beta
Package: google-chrome-stable
Package: google-chrome-unstable
    
por 11.01.2013 / 18:36
0

As outras respostas estão incorretas, porque o parâmetro ?archive() é uma expressão regular. Portanto, ?archive(stable) corresponde tanto a stable como a unstable . Para excluir apenas stable , você precisa ancorar o padrão de expressão regular:

aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^stable$")))'

Para excluir vários repositórios:

aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^(xenial|xenial-updates)$")))'

Observe também que alguns pacotes pertencem a vários repositórios, por exemplo, %código%. xenial-security,xenial-updates avalia o padrão regex em relação a cada repositório individualmente, portanto, ?archive() corresponderá a todos os pacotes pertencentes a ?archive("^xenial-updates$") , mesmo se pertencer a outros repositórios também.

    
por 27.01.2019 / 00:12