Usando o aptitude, para procurar pacotes instalados fora do ramo stable, você pode usar:
aptitude search "?narrow(?installed,?not(?archive(stable)))"
Para ver versões e nomes de pacotes (e não descrições), você pode usar o comando com a opção de formato ( -F
para abreviar), como a seguir.
aptitude search -F "%p %V %v" "?narrow(?installed,?not(?archive(stable)))"
Para mais formatos, consulte a página de manual (aqui está a documentação com as opções disponíveis ).
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 ver de onde vem um pacote instalado apt-cache policy
, o uso é o seguinte:
apt-cache policy <package-name>
Por exemplo, meu pacote python-numpy renderiza 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 atual do sid / main, 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 1.6.2-1
.
No momento da submissão, este pacote já estava atualizado:)
?any-version()
, porque~narrow(pat1, pat2)
é o mesmo?any-version(pat1 pat2)
e suporta?any-version(pat1 pat2 pat3)
sem parecer estúpido.Depois de ler a página de informações do aptitude e uma dúzia de tentativas, finalmente consegui o seguinte:
ou equivalente) :
Ele pesquisará pacotes instalados a partir de arquivos instáveis de qualquer repositório. Você precisa filtrar os pacotes do seu arquivo padrão (testando no exemplo acima).
Se você deseja filtrar os pacotes instalados em www.debian-multimedia.org/unstable:
Edit: “Archive”, “origin” etc. são deduzidos do
Release
arquivo do repositório. Infelizmente, nem todas as ferramentas podem examinar todas essas linhas e usam sintaxe diferente para elas. Você pode encontrar esses arquivos como/var/lib/apt/lists/*Release
. Ou apenas digiteapt-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:
ouArchive:
(nome antigo!)?archive(___)
ou~A___
%t
release a=___
natty-backports
,trusty-security
,stable
Origin:
?origin(___)
ou~O___
release o=___
Canonical
,Google, Inc.
,LP-PPA-dockbar-main
,Ubuntu
fonte
Examine a tag de origem (como o = Debian ) para cada um de seus repositórios atuais:
Em seguida, procure pacotes de (ou não de) uma origem específica:
Isso não é adequado para uma auditoria de segurança, pois depende de cada repositório para fornecer suas próprias informações de origem, mas pode ser útil para solucionar problemas na origem de pacotes que estão presentes em vários repositórios.
fonte
aptitude search
padrões não são bons. - Eles selecionam assim "listar pacotes onde uma versão está instalada e qualquer outra versão existir no Debian" ou "alguma versão instalada e pelo menos uma versão desse pacote disponível no não-Debian". - O que procuramos é "a versão instalada é do Debian (ou não)". Isso tem que ser feito com?narrow()
ou?any-version()
.nemo-fileroller
partir delinuxmint
, mas ele existeDebian
também. Então ele aparece na lista, porque está instalado e existe em algum lugar do Debian.Para completar: Nos sistemas Ubuntu, você também pode usar o Synaptic para esta tarefa. Na coluna da esquerda, você pode filtrar os pacotes por sua origem.
fonte
Eu encontrei isso:
Você também pode encontrar uma lista de termos de pesquisa suportados por "aptitude search" aqui .
fonte
sudo
? Parece-me que isso também funciona sem executá-lo como root.Primeiro, encontre o (s) arquivo (s) apropriado (s) 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 o seguinte:
e eu recebo a saída:
O dpkg -s retorna 0 se o pacote estiver instalado e diferente de zero. Para fins de referência futura, a saída de
estava
fonte
As outras respostas estão realmente incorretas, porque o parâmetro para
?archive()
é uma expressão regular. Então?archive(stable)
combina ambosstable
eunstable
. Para excluir apenasstable
você precisa ancorar o padrão regex:Para excluir vários repositórios:
Observe também que alguns pacotes pertencem a vários repositórios, por exemplo
xenial-security,xenial-updates
.?archive()
avalia o padrão regex em relação a cada repositório individualmente, portanto?archive("^xenial-updates$")
, corresponderá a todos os pacotes pertencentes axenial-updates
, mesmo que também pertençam a outros repositórios.fonte