Listar dependências (recursivas) dos pacotes instalados no APT

17

Para cada pacote que instalei, gostaria de saber quais pacotes seriam instalados se eu o desinstalasse. Um exemplo da saída que preciso é ( package: list of deps):

abc: foo bar
bcd: baz abc
bdd: baz fuubar

Acrescentar

Se eu verificar o que realmente seria removido se remover o pacote pppusando apt-get:

$ echo $(apt-get --dry-run remove ppp | grep '^Remv ' | cut -d' ' -f2)
gnome-ppp mint-meta-xfce network-manager-pptp-gnome network-manager-pptp wvdial pppoeconf pppoe pptp-linux pppconfig ppp

Vejo que é diferente do que o apt-cacheprograma me dá (o que não acho que inclua dependências recursivas):

$ apt-cache show ppp | grep '^Breaks: '
Breaks: network-manager (<= 0.8.0.999-1), network-manager-pptp (<= 0.8.0.999-1), pppdcapiplugin (<= 1:3.9.20060704+dfsg.1-1)

Anexo 2

É dpkg --get-selections | cut -f1uma maneira confiável de repetir uma lista de pacotes instalados?

Excluído
fonte
1
A análise apt-get --dry-run removeparece basicamente correta. Pode perder alguns pacotes instalados automaticamente, necessários apenas para pacotes instalados automaticamente, necessários apenas pelo pacote que você remove. É por isso que você não considera uma resposta adequada?
Gilles 'SO- stop be evil'

Respostas:

11

Você fez algumas perguntas diferentes aqui, espero poder pelo menos ajudar em uma ou duas.

Para listar todos os pacotes instalados, use dpkgpara saída em uma lista separada por campos

dpkg -l 

Para obter apenas a lista de pacotes, sem campos extras, você pode canalizá-la para outro lugar.

dpkg -l | awk '{print $2 }' # Pipe to grep after the awk, or glob from dpkg

Por exemplo, se eu quiser remover um kernel antigo,

apt-get purge `dpkg -l linux* | awk '{print $2}' | grep 3.0.0-12`

A maneira mais fácil de passar por todas as dependências desnecessárias é com debfoster. Ele roda interativamente e passa pelo que você deseja, suas dependências e pode remover ou listar o que não é uma dependência recursiva.

Para listar todas as dependências recursivas de um pacote específico,

debfoster -d $PACKAGE ## PACKAGE is the specific package.

Após a execução, debfostervocê pode verificar quaisquer dependentes que um pacote também tenha,

debfoster -e $PACKAGE ## PACKAGE is the specific package.

Uma ótima maneira de listar pacotes 'órfãos' é com deborphan. Execute deborphansem opções e listará todos os pacotes 'órfãos'. Um 'órfão' é um pacote do qual nada depende, e você não instalou explicitamente.

Também gosto de limpar todos os pacotes 'órfãos', após uma nova instalação. Depois de remover pacotes específicos, você pode perder tudo apt-get autoremove --purgecom,

apt-get purge `deborphan`

Finalmente, às vezes você não o faz --purgee acaba com as sobras do pacote, as versões mais recentes do apt-getpodem removê-las automaticamente. Para remover todas as sobras dos pacotes desinstalados, execute:

apt-get autoclean

Se você não possui a nova versão apt-get, sempre pode removê-los com esses comandos. Eles cometem erros se não houver arquivos "restantes", parece que a limpeza automática pode perder alguns ocasionalmente, independentemente.

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs dpkg --purge
JM Becker
fonte
debfoster ainda existe, mas é considerado substituído por recursos no aptitude
Joshua Clayton
4
apt-cache show pkgname1 pkgname2...

irá (entre outras coisas) listar essas dependências (tempo de execução). Isso geralmente é adequado, a menos que você esteja alimentando a máquina para processamento adicional. Se você quiser exatamente o formato que você declarou, provavelmente precisará escrever um script.

Faheem Mitha
fonte
Desculpe, formulei minha pergunta incorretamente. Estou interessado em saber quais pacotes seriam desinstalados para cada pacote que eu instalei. E também preciso listar todos os pacotes que instalei.
Excluído
2
@ Excluído: Desculpe, eu não vi este comentário até agora. Em resposta a "quais pacotes seriam desinstalados para cada pacote que eu instalei" (presumo que você queira que essa pergunta seja respondida por pacote) tente apt-get remove -s packagename. Listar todos os pacotes que você instalou é justo dpkg -l.
Faheem Mitha 17/04
@FaheemMitha: post antigo, mas ainda ótima dica apt-get remove -s packagename!
precisa saber é o seguinte
@ twan163 Feliz por ter sido útil para você.
FaHemem Mitha
1

Eu acho que você tem que continuar e criar um loop para a mesma coisa:

apt-cache depends libtext-wrapi18n-perl |xargs apt-cache depends

É claro que remova os cabeçalhos.

PersianGulf
fonte
2
O apt-cache depende tem uma opção recorrenteapt-cache depends --recurse libtext
Joshua Clayton