¿Cómo enumerar paquetes dependientes (dependencias inversas)?

201

Para investigar qué causó la instalación de un paquete dado, me gustaría obtener una lista de paquetes que dependen de ese paquete. No pude encontrar nada obvio en man dpkg.

l0b0
fuente
55
Todas las respuestas de la pregunta anterior giran en torno a aptitudealgo que no se ha instalado por defecto durante años. En 2017, todos en Ubuntu todavía lo tienen apt-cache. Cualquiera que siga la pregunta vinculada se perderá en una discusión sobre un programa que pocos tendrán.
Lambart

Respuestas:

252

apt-cache rdepends packagename deberías hacer lo que quieras

RobotHumanos
fuente
1
¡Excelente! apt-cache rdepends tofrodosconfirmó la sospecha de que fue instalado por otro paquete (el obsoleto dos2unix).
l0b0
2
En cuanto a hoy (apt versión 0.9.9.1), existe la opción --recurse que funciona con rdepends.
jarno
43
Si agrega --installed, el resultado es incluso útil para paquetes que pueden ser utilizados por muchos otros:apt-cache rdepends --installed packagename
quazgar
2
Hay una sintaxis ligeramente diferente que me ayudó a diferenciar entre Recommendos, Depende, Sugiere, etc. La sintaxis es sudo apt rdepends packagename(Note que no está usando apt-cache sino simplemente apt)
Vahid Pazirandeh
44
Para la salida, ¿por qué algunos de los paquetes tienen una barra vertical (símbolo de tubería) delante de ellos?
Vahid Pazirandeh
62

aptitude tiene una forma bastante buena de manejar esto:

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

De manera predeterminada, solo enumera la razón "más instalada, más fuerte, más ajustada, más corta", pero puede usarla aptitude -v whypara que muestre todo lo que encuentre.

planta rodadora
fuente
44
Parece que solo considera los paquetes instalados, no todo lo disponible. Y eso era lo que necesitaba.
Tuukka Mustonen
3
Para eso que quieres reverse-dependsenubuntu-dev-tools
tumbleweed
¿Qué tal debian?
Tuukka Mustonen
1
ubuntu-dev-toolsestá en Debian
planta rodadora
Esto es genial. Aprendí eso openssh-server recomendado (y por lo tanto instalado) xauthen un servidor sin cabeza, arrastrando cientos de dependencias x11 y docenas de actualizaciones inútiles al mes. ¡Ese es el problema con la gestión automatizada de paquetes!
BaseZen
18
apt-cache showpkg <pkgname> 

Ejemplo:

apt-cache showpkg lightdm
mañana
fuente
sintaxis actualapt showpkg <pkgname>
l --marc l
16

Hay más de una forma, con cada método mostrando una salida diferente.

Para una vista detallada del árbol de dependencia inversa completo;

aptitude install apt-rdepends
apt-rdepends -r bash

Alternativamente;

apt-cache showpkg bash

O una lista concisa:

apt-cache rdepends bash
papashou
fuente
¿Qué se rdependsmuestra exactamente en ese árbol? apt-rdepends php7.0-fpmmuestra sed. sedno depende de PHP, y mucho menos de PHP FPM.
Dan Dascalescu el
Es inverso depende, significa que PHP depende de sed.
Erik Berkun-Drevnig
1
Hola chicos, en realidad "apt-rdepends" significa "dependencia recursiva". Si desea una dependencia recursiva inversa, debe escribir:apt-rdepends -r yourPackageNameHere
SebMa
La página de manual de apt-cache dice "rdepends muestra una lista de cada dependencia inversa que tiene un paquete". Mientras que apt-rdepends requiere la opción -r para hacer dependencias inversas, como dice @SebMa.
NeilG
8

La opción más simple sigue siendo:

apt rdepends package-name

lo cual no requiere que instales ningún paquete.

Corrado Topi
fuente
1
¿Qué está agregando esto a la respuesta aceptada?
l0b0
2
La respuesta aceptada no tiene nada que ver con esta. El resultado es completamente diferente y mucho más útil para el consumo humano que el de apt-cache. La respuesta menciona que apt-cache no está instalado de forma predeterminada en todas partes, eso solo debería ser una pista bastante buena de por qué esta respuesta tiene su propósito. Finalmente, esta es en realidad la respuesta que estaba buscando, por lo que cualquier voto negativo es bastante tonto.
stefanct
Una razón muy importante por la que esto es mejor que la versión aceptada es que incluye la versión de las dependencias, a diferencia de apt-cachela salida de s. Es exactamente lo que necesitaba en este momento (depurar una incompatibilidad de glibc 2.28, así que votar)
Por Lundberg
voto a favor por usar solo apt. en el momento de la respuesta original, no estoy seguro de que esta solución adecuada hubiera sido válida, pero si lo es ahora, eso es bueno.
RobotHumans
7

Además de otras buenas respuestas, un APT / APT-GET -srealiza una eliminación (o instalación) "simulada".

sudo apt -s remove <pkgname>

Al usar -so --simulatedpara eliminar (o instalar) paquetes, normalmente se enumerarán las dependencias afectadas. Mostrará paquetes huérfanos al eliminar o dependencias necesarias al instalar sin ejecutar realmente el installo remove. Solo informativo.

bshea
fuente
apt remove -s php7.0-fpmmuestra 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 qué se instalaría Apache si elimino PHP FPM?
Dan Dascalescu
@DanDascalescu Hmm. Puede ser un script de instalación / eliminación incorrecto para apt pkg o podría tener otras dependencias que instalen apache2 como dep (lo que significa que se necesita un servidor web, y creo que apache2 es el servidor web predeterminado). Podrían ser algunas cosas. Simplemente no estoy seguro. Tiene el olor de una buena publicación en AskUbuntu si no has encontrado una respuesta.
bshea