Como listar pacotes dependentes (dependências reversas)?

201

Para pesquisar o que causou a instalação de um determinado pacote, eu gostaria de obter uma lista de pacotes que dependem desse pacote. Não consegui encontrar nada óbvio man dpkg.

l0b0
fonte
5
As respostas da pergunta mais antiga giram em torno de aptitudealgo que não é instalado por padrão há anos. Em 2017, todo mundo no Ubuntu ainda tem apt-cache. Qualquer um que seguir a pergunta vinculada se perderá em uma discussão sobre um programa que poucos terão.
Lambart

Respostas:

252

apt-cache rdepends packagename deve fazer o que quiser

RobotHumans
fonte
11
Excelente! apt-cache rdepends tofrodosconfirmou a suspeita de que foi instalado por outro pacote (o obsoleto dos2unix).
L0b0
2
Hoje em dia (versão apt 0.9.9.1), existe a opção --recurse que funciona com rdepends.
22413 jarno
43
Se você adicionar --installed, o resultado será útil para pacotes que podem ser usados ​​por muitos outros:apt-cache rdepends --installed packagename
quazgar 27/05
2
Há uma sintaxe um pouco diferente, que me ajudou a diferenciar entre Recomenda, Depende, Sugere, etc. A sintaxe é sudo apt rdepends packagename(Note que não está usando o apt-cache, mas simplesmente apt)
Vahid Pazirandeh
4
Para a saída, por que alguns dos pacotes têm uma barra vertical (símbolo de tubo) diante deles?
Vahid Pazirandeh
62

O aptitude tem uma maneira bastante agradável de lidar com isso:

$ aptitude why bash
i   foomatic-filters PreDepends bash (>= 2.05)

Por padrão, ele lista apenas o motivo "mais instalado, mais forte, mais rígido, mais curto", mas você pode usar aptitude -v whypara fazer com que ele produza tudo o que encontrar.

tumbleweed
fonte
4
Parece considerar apenas os pacotes instalados, nem tudo disponível. E era disso que eu precisava.
Tuukka Mustonen
3
Para que você quer reverse-dependsdentroubuntu-dev-tools
tumbleweed
E o debian?
Tuukka Mustonen
11
ubuntu-dev-toolsestá no Debian
tumbleweed
Isso é ótimo. Aprendi que era openssh-server recomendado (e, portanto, instalado) xauthem um servidor sem cabeçalho, arrastando centenas de dependências x11 e dezenas de atualizações inúteis por mês. Esse é o problema com o gerenciamento automatizado de pacotes!
BaseZen
18
apt-cache showpkg <pkgname> 

Exemplo:

apt-cache showpkg lightdm
amanhã
fonte
sintaxe atualapt showpkg <pkgname>
l --marc l
16

Há mais de uma maneira, com cada método mostrando uma saída diferente.

Para uma visão detalhada da árvore de dependência reversa completa;

aptitude install apt-rdepends
apt-rdepends -r bash

Alternativamente;

apt-cache showpkg bash

Ou uma lista concisa:

apt-cache rdepends bash
papashou
fonte
O que exatamente rdependsmostra nessa árvore? apt-rdepends php7.0-fpmmostra sed. sednão depende do PHP, muito menos do PHP FPM.
Dan Dascalescu
É reverso depende, isso significa que o PHP depende do sed.
Erik Berkun-Drevnig 25/04/19
11
Oi pessoal, na verdade "apt-rdepends" significa "dependência recursiva". Se você quiser reverter a dependência recursiva, você tem que digitar:apt-rdepends -r yourPackageNameHere
SebMa
A página do manual apt-cache diz que "rdepends mostra uma lista de cada dependência reversa que um pacote possui". Enquanto o apt-rdepends requer a opção -r para fazer dependências reversas, como o @SebMa diz.
NeilG
8

A opção mais simples ainda é:

apt rdepends package-name

o que não requer a instalação de nenhum pacote.

Corrado Topi
fonte
11
O que isso está adicionando à resposta aceita?
L0b0
2
A resposta aceita não tem nada a ver com essa. A saída é completamente diferente e muito mais útil para consumo humano do que o apt-cache. A resposta menciona que o apt-cache não é instalado por padrão em todos os lugares - isso por si só deve ser uma boa dica de por que essa resposta tem seu objetivo. finalmente, esta é realmente a resposta que eu estava procurando; portanto, qualquer voto negativo é bastante tolo.
stefanct
Uma razão muito significativa para que isso seja melhor que a versão aceita é que ela inclui a versão das dependências, diferente da apt-cachesaída de s. É exatamente o que eu precisava agora (depurando uma incompatibilidade glibc 2.28, portanto, com votos positivos)
Por Lundberg
voto positivo por usar apenas o apt. no momento da resposta original, não tenho certeza se essa solução apenas adequada seria válida, mas se for agora, isso é bom.
RobotHumans
7

Além de outras boas respostas, um APT / APT-GET -sfaz uma remoção "simulada" (ou instala).

sudo apt -s remove <pkgname>

O uso -sou --simulatedremoção (ou instalação) de pacotes normalmente listará todas as dependências afetadas. Ele mostrará pacotes órfãos ao remover ou dependências necessárias ao instalar sem realmente executar o installou remove. Apenas informativo.

bshea
fonte
apt remove -s php7.0-fpmmostra The following additional packages will be installed: apache2 apache2-bin apache2-data libapache2-mod-php7.0 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0. Por que o apache seria instalado se eu removesse o PHP FPM?
Dan Dascalescu
@DanDascalescu Hmm. Pode ser um script de instalação / remoção incorreto para o apt pkg ou você pode ter outras dependências que instalam o apache2 como dep (o que significa que um servidor da web é necessário - e acredito que o apache2 é o servidor da web padrão). Poderia ser algumas coisas. Só não tenho certeza. Tem o cheiro de uma boa publicação no AskUbuntu, se você não encontrou uma resposta.
bshea