Ubuntu / Consultar paquetes instalados, versiones y archivos con APT y dpkg-query

En Ubuntu, use apt list --installed para consultar los paquetes Deb instalados de forma interactiva. Para comprobar estados concretos o producir una salida controlada en scripts, use dpkg-query y seleccione los campos y estados necesarios. La consulta de un registro no implica por sí sola que el paquete siga instalado.

Ver la lista completa de paquetes instalados

Para consultar los paquetes Deb instalados, incluidos los gestionados mediante APT (Advanced Package Tool) o instalados desde un archivo local, junto con la versión y arquitectura, ejecute la orden siguiente.

apt list --installed

Si la lista es larga, puede dividirla en páginas con less o especificar directamente un patrón de nombre de paquete.

apt list --installed | less
apt list --installed 'nginx*'

apt es una interfaz usada por personas de manera interactiva. Para conservar los resultados en un archivo o procesarlos de manera confiable en otros comandos, dpkg-query, que permite especificar el formato de salida, es más adecuado.

dpkg-query -W -f='${binary:Package}\t${Version}\t${Architecture}\n' | sort

La consulta -W anterior enumera registros de dpkg y puede incluir paquetes retirados que conservan configuración. Para obtener solo nombres cuyo estado sea installed, puede filtrar explícitamente: dpkg-query -W -f='${db:Status-Status} ${binary:Package}\n' | awk '$1 == "installed" {print $2}'. Para las reglas de estado, consulte el manual de dpkg-query de Debian.

Verificar si un paquete específico está instalado

Cuando conoce el nombre exacto del paquete

El siguiente comando muestra los elementos de la base de datos de estado de dpkg de nginx. Si el paquete está instalado correctamente, aparecerá Status: install ok installed.

dpkg-query -s nginx

Para verificar el estado de instalación en una sola línea, puede imprimir directamente el campo de estado.

dpkg-query -W -f='${db:Status-Status}\n' nginx

La salida en un estado de instalación normal es installed. Si el paquete no está en la base de datos, se devuelve un estado de salida distinto de 0, por lo que en la automatización, además del texto en pantalla, verifique también el estado de salida.

Al buscar nombres similares juntos

dpkg-query -l admite patrones de comodín de shell. Es seguro poner el patrón entre comillas para que la shell no los expanda primero.

dpkg-query -l 'nginx*'

Los primeros tres caracteres de la salida indican respectivamente la acción deseada, el estado actual y el estado de error. ii, que se ve con frecuencia, significa que se desea la instalación y que el estado actual es instalado.

Indicación Significado
ii Se desea la instalación y actualmente está instalado correctamente.
rc El archivo del paquete ha sido eliminado, pero los archivos de configuración permanecen.
iU El archivo fue descomprimido, pero la configuración no se ha completado.
Estado en mayúsculas Puede estar en un estado incompleto o grave, por lo que se debe verificar el estado detallado y los registros de trabajo del paquete.

Verificar versión instalada y candidato del repositorio

Mostrar solo la versión actualmente instalada

dpkg-query -W -f='${binary:Package}\t${Version}\n' curl

binary:Package agrega arquitectura al nombre si es necesario en paquetes Multi-Arch para diferenciarlos. Para comparación de versiones o comparación de listas entre servidores, es más seguro usar este valor que el campo general Package.

Comparar versión instalada con candidato de actualización

apt-cache policy curl

Installed es la versión actual, Candidate es la versión candidata seleccionada desde la configuración activa del repositorio. Los metadatos del repositorio pueden estar desactualizados, por lo que antes de juzgar la actualización se debe ejecutar sudo apt update.

Verificar archivos instalados por el paquete

Lista de archivos incluidos en el paquete

dpkg-query -L nginx

Este comando muestra la lista de archivos registrada en la base de datos de dpkg. No es un comando que muestre todos los archivos, incluidos los nuevos archivos de registro, caché, carga y base de datos creados después de la instalación.

Verificación del paquete propietario de un archivo específico

dpkg-query -S /usr/bin/curl

Si el archivo es un enlace simbólico, también se consulta la ruta del destino real.

readlink -f /usr/bin/python3
dpkg-query -S "$(readlink -f /usr/bin/python3)"

dpkg-query -S busca la propiedad de rutas conocidas en la base de datos local de dpkg; no busca en todos los paquetes disponibles del repositorio. Para averiguar qué paquete no instalado ofrece un archivo, necesita índices y herramientas como apt-file.

Diferenciación entre instalación manual y automática de paquetes

APT registra diferenciando entre paquetes que el usuario seleccionó directamente y paquetes que se instalaron automáticamente como dependencias.

apt-mark showmanual
apt-mark showauto

Los resultados de showmanual pueden incluir no solo programas que el usuario instaló directamente más tarde, sino también metapaquetes que componen la instalación predeterminada de Ubuntu y elementos que la imagen inicial mostró como instalados manualmente. Por lo tanto, no se debe concluir la ruta de instalación o el propósito del uso solo con esta lista.

Las dependencias de instalación automática, que ya no requieren ningún paquete manual, pueden ser propuestas para autoremove. Antes de eliminarlas, asegúrese de revisar los candidatos y el alcance del impacto.

sudo apt autoremove --dry-run

Guardar un inventario de la base de datos de dpkg

El siguiente comando guarda nombres, versiones y arquitecturas de los registros de dpkg separados por tabuladores. No filtra por estado: puede incluir entradas de paquetes retirados. Use el filtro de estado explicado antes si necesita exclusivamente los instalados y conserve también el estado en un inventario de diagnóstico. El nombre de salida se sobrescribe: elija un nombre nuevo o preserve el anterior.

dpkg-query -W -f='${binary:Package}\t${Version}\t${Architecture}\n' \
  | sort > installed-packages.tsv

Para comparar dos capturas, guárdelas realmente con nombres distintos y sustituya los dos nombres de ejemplo siguientes. Un estado de salida 1 de diff significa diferencias; no implica por sí solo un error de lectura.

diff -u installed-packages-before.tsv installed-packages-after.tsv

Este archivo es un inventario que registra el estado en ese momento y no un medio de recuperación completo. En otras versiones de Ubuntu puede que no existan las mismas versiones, y los paquetes de repositorios, PPA, Snap, la configuración local y los datos de aplicaciones deben guardarse por separado.

Distinción entre paquetes Deb y Snap

apt y dpkg-query consultan paquetes Deb. Las aplicaciones instaladas mediante Snap deben verificarse con un comando separado.

snap list

Si se necesita un inventario completo del software del servidor, se deben verificar por separado los paquetes Deb, Snap, las imágenes de contenedores, los gestores de paquetes por lenguaje y los programas de instalación manual.

Resumen de comandos por propósito

Propósito de verificación Comando recomendado
Lista completa de paquetes Deb apt list --installed
Salida de nombre y versión estandarizados dpkg-query -W -f='FORMATO'
Estado de un paquete específico dpkg-query -s PAQUETE
Versión instalada y versión candidata apt-cache policy PAQUETE
Archivos instalados por el paquete dpkg-query -L PAQUETE
Paquete propietario de un archivo dpkg-query -S RUTA_DEL_ARCHIVO
Elementos que muestran instalación manual apt-mark showmanual
Lista de paquetes Snap snap list

Puntos a tener en cuenta al verificar

  • Si busca paquetes con grep, pueden aparecer también otros paquetes que compartan parte del nombre. Para un juicio exacto sobre la instalación, use dpkg-query -s o -W.
  • dpkg-query -l puede mostrar elementos que solo tienen configuraciones además de los paquetes instalados actualmente, por lo que debe leer también la columna de estado.
  • No se puede determinar si un servicio se está ejecutando solo con la lista de paquetes. El estado del servicio se verifica por separado con herramientas de administración del servicio, como systemctl status.
  • Antes de eliminar un paquete que parezca innecesario, verifique las dependencias, los metapaquetes y el impacto en las funciones operativas.

Documentos de referencia