¿Cómo puedo enumerar todos los paquetes que he instalado desde un repositorio particular?

51

¿Cómo puedo enumerar todos los paquetes que he instalado desde un repositorio particular?

¿Cómo puedo enumerar todos los paquetes instalados que no están disponibles en los archivos principales de Ubuntu y también ver de qué repositorios provienen? (Si supiera la respuesta a esta pregunta, podría seleccionar esa lista para un nombre de PPA en particular para encontrar la respuesta a mi primera pregunta).

Marius Gedminas
fuente
Como no parece haber una herramienta de línea de comandos para esto (lamentablemente), aceptaré una de las respuestas de la GUI.
Marius Gedminas

Respuestas:

24

Expanda el elemento "Software instalado" en el Centro de software de Ubuntu. Verá una lista de todos los repositorios diferentes que ha habilitado. Al hacer clic en el repositorio, se mostrarán los paquetes que ha instalado de cada uno.

texto alternativo

andrewsomething
fuente
Me temo que esa opción solo está disponible en Ubuntu 10.10 o ¿me falta algo? Mi Centro de software no muestra las fuentes debajo de ese menú.
lovinglinux
2
En mi versión tengo un menú desplegable "Instalado" en la parte superior. Cuando selecciono esa opción, puedo elegir las diversas fuentes (núcleo, para comprar, PPA ...)
Alexis Wilke
En Ubuntu 16.04, esta página ya no está disponible. Sin embargo, Synaptic tiene una característica similar: haga clic en "Origen" en la esquina inferior izquierda.
Josh
26

Parece que no hay registro del origen de un paquete instalado .

Si está de acuerdo en obtener la ubicación desde donde se descargaría un paquete del mismo nombre, está disponible a través de apt-cache policy. El siguiente script (bastante feo) hace el truco para mí:

LC_ALL=C dpkg-query --showformat='${Package}:${Status}\n' -W '*' \
  | fgrep ':install ok installed' \
  | cut -d: -f1 \
  | (while read pkg; do 
       inst_version=$(apt-cache policy $pkg \
                                | fgrep Installed: \
                                | awk '{ print $2 }'); 
       origin=$(apt-cache policy "$pkg" \
                          | fgrep " *** ${inst_version}" -C1 \
                          | tail -n 1 \
                          | cut -c12-); 
       echo $pkg $origin; 
     done)

Tenga en cuenta que es bastante frágil, ya que hace suposiciones sobre la salida de apt-cache policy, que pueden cambiar entre versiones ...

Riccardo Murri
fuente
Sí, esto básicamente significaría escribir una herramienta desde cero. Y creo que analizar / var / lib / apt / lists con Perl o Python sería más rápido y más robusto.
Marius Gedminas
Funciona normalmente aquí, en 2018 :) ¡Gracias!
N0rbert
Desarrollé una solución similar probada en Ubuntu y Debian.
famzah
23

Abra Synaptic Package Manager y haga clic en el botón "Origen" en la parte inferior de la barra lateral izquierda. Enumerará sus fuentes. Seleccione una fuente para ver los paquetes disponibles / instalados.

lovinglinux
fuente
4

Este script enumera los paquetes que están instalados y disponibles en el PPA:

#!/bin/sh
# Give PPA name as an argument, e.g. ppa:oibaf/graphics-drivers

name1="$(echo "$1"|cut -d: -f2|cut -d/ -f1)"
name2="$(echo "$1"|cut -d/ -f2)"

awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' \
/var/lib/apt/lists/*"$name1"*"$name2"*Packages |
xargs dpkg-query -W -f='${Status} ${Package}\n' 2>/dev/null  | awk '/^[^ ]+ ok installed/{print $4}'

Apliqué esto .

Por cierto, en cuanto a eliminar PPA del uso, utilice el programa de purga ppa; He creado una versión mejorada aquí .

jarno
fuente
3

En Quantal (12.10), el espacio en la línea de origen debe eliminarse.

LC_ALL=C dpkg-query --showformat='${Package}:${Status}\n' -W '*' \
 | fgrep ':install ok installed' \
 | cut -d: -f1 \
 | (while read pkg; do 
   inst_version=$(apt-cache policy $pkg \
                            | fgrep Installed: \
                            | cut -d: -f2-); 
   origin=$(apt-cache policy "$pkg" \
                      | fgrep " ***${inst_version}" -C1 \
                      | tail -n 1 \
                      | cut -c12-); 
   echo $pkg $origin; 
 done)
Graham Dunn
fuente