Como obtenho uma lista de pacotes disponíveis (isto é, desinstalados) no Debian?

19

Essencialmente, o que estou procurando é o equivalente do Debian:

yum list available

para me mostrar quais pacotes estão disponíveis (embora não estejam atualmente instalados). Prefiro algo que possa ser executado no console, pois está em um servidor remoto. Obrigado.

freakwincy
fonte

Respostas:

7

grep-dctrle seus derivados fornecem uma ótima maneira de consultar os arquivos de cache do apt. (Você pode instalar essas ferramentas no ubuntu com o sudo apt-get install dctrl-tools)

No caso de pacotes disponíveis (mas não necessariamente instalados), você pode usar grep-available. Por exemplo, para listar todos os pacotes disponíveis:

grep-available  -s Package .

Editar:

aptitude pode mostrar uma lista de pacotes não instalados, iniciando-a.

Você também pode obter uma lista de pacotes não instalados aptitudeusando:

aptitude -F "%p" search "?not(?installed)"

Observe que, com os novos pacotes com vários arcos, você obterá pacotes para outras arquiteturas listadas neste resultado. Por exemplo, eu recebo:

aptitude -F "%p" search "?not(?installed)"  | grep "^bash:"
bash:i386

Eu tenho o bashpacote instalado, mas é a versão amd64, pois meu sistema operacional está instalado com a versão amd64 do Ubuntu Precise. Se você não quiser ver esses pacotes para outras arquiteturas, poderá excluir linhas que contenham ::

aptitude -F "%p" search "?not(?installed)"  | grep -v ':'
ℝaphink
fonte
Obrigado, mas o problema com isso é que eu teria que vasculhar as listas de pacotes inteiras dos meus repositórios escolhidos. Talvez uma maneira melhor de visualizar o problema fosse assim: imagine X sendo o conjunto universal de todos os pacotes nos repositórios de pacotes Debian para os quais meu servidor está apontado e Y sendo o conjunto de pacotes que instalei nesse servidor; o que, em essência, procuro é X - Y. Agora, percebo que posso fazer isso programaticamente, mas esperava que houvesse um comando relativamente simples para obter o mesmo resultado em um sistema Debian.
Freakwincy
Acabei de ver sua resposta editada. É exatamente o que eu estava procurando! Obrigado.
Freakwincy 04/04
PS: Eu teria votado positivamente na sua resposta, mas ainda não acumulei pontos de reputação suficientes.
Freakwincy 04/04
Sem problemas. Bem-vindo ao SU pela maneira ;-)
ℝaphink
16

apt-cache é usado para consultar o cache do pacote:

pkgnames do apt-cache | ordenar
coisa de pesquisa apt-cache
pesquisa apt-cache - coisa somente de nomes
gravidade
fonte
obrigado, mas receio que isso não funcione. Comparei a lista gerada pelo primeiro comando com uma lista gerada anteriormente de pacotes instalados, que derivou assim: code"dpkg --get-selections | grep '[[: space:]] install $' | awk '{print $ 1}' > installed.txt "e encontrou duplicatas. Os outros dois comandos que você forneceu não funcionarão porque não estou procurando um pacote específico, mas qualquer pacote que não esteja instalado no momento.
Freakwincy
2

Use apt-cachepara esta finalidade:

apt-cache search package

Como apt-cacheapenas usa o cache do pacote no sistema, verifique se esse cache está atualizado:

apt-get update

Você também pode usar o utilitário apt-filese souber o nome do arquivo que deseja procurar; isso deve ser adicionado ao sistema no entanto. Por exemplo:

apt-file search somefilename

Costumo usar apt-cachede uma das seguintes maneiras:

apt-cache search package | sort | grep item

(Isso mostra as coisas que possuem itens realmente em seus resumos ou nomes.)

apt-cache search thing | sort | less

(Isso procura por algo e o classifica para uma visualização agradável less.)

Mei
fonte
2

Meu ponto de vista é trabalhar com comandos instalados por padrão e evitar pacotes extras se não houver um motivo específico.

No meu Debian com GNU bash esses comandos simples

apt list
apt list --all-versions

fornece uma lista de qualquer coisa (instalada e não instalada). Posso então limitar os resultados com grep "instalado" ou grep -v "instalado". Também pode ser combinado com um ou mais nomes de pacotes (caracteres curinga aceitos).

O switch "-all-versions" fornece na saída linhas separadas para cada versão do pacote (estável, teste, instável, experimental).

A simples "lista apt" fornece apenas uma versão (a mais alta prioridade).

George Vasiliou
fonte
0

Tomando sua pergunta estritamente (você deseja mostrar uma lista de pacotes não instalados), tente usar

(editado de acordo com os comentários abaixo)

# apt-get update
# dpkg -l '*' | egrep --invert-match '^i'

Não tenho certeza da sintaxe exata, pois estou escrevendo isso em uma caixa do Windows e não há como verificar. Talvez tente mudar o que você deseja

PPC
fonte
Isso lista os pacotes instalados , não desinstalados .
ℝaphink
@Raphink: Desculpe, eu editei o post para corrigir isso
PPC
Não tem problema, mas você ainda não está listando pacotes que não estão instalados. Ao excluir pacotes 'II' (que na verdade não é realmente o que a sua expressão faz, você deve usar '^ii'em vez de '[ii]'), você está perdendo em pacotes que estão instalados mas não configurados por exemplo (como iFou iHpor exemplo).
precisa saber é o seguinte
@PPC: Infelizmente, isso não funciona, pois o dpkg -l lista apenas os pacotes instalados, ou seja, todos os pacotes são precedidos por "ii"; portanto, canalizando os resultados para grep usando os sinalizadores --invert-match ou -v série de traços, que é o separador de cabeçalho da lista. Obrigado mesmo assim.
Freakwincy
@ freakwincy: Certo! Desculpe por não testá-lo antes de enviar (trabalhando no Windows). De acordo com a página de manual, você deve usar "dpkg -l '*'" para listar todos os pacotes.
PPC