Gestión de paquetes en Ubuntu: Hoja de referencia de APT y dpkg

Comandos esenciales de APT y dpkg para paquetes de Ubuntu

El sistema de gestión de paquetes de Ubuntu es la columna vertebral de la instalación y mantenimiento del software, por lo que es conocimiento esencial para cualquier usuario de Linux o administrador de sistemas.

tetris Esta imagen fue generada por modelo AI Flux 1 dev.

¿Qué es la gestión de paquetes APT?

APT (Advanced Package Tool) es el sistema principal de gestión de paquetes de Ubuntu, heredado de Debian. Es una herramienta poderosa de línea de comandos para instalar, actualizar y eliminar paquetes de software. APT resuelve automáticamente las dependencias, se conecta a los repositorios oficiales de Ubuntu y es el método tradicional para gestionar paquetes del sistema en distribuciones basadas en Ubuntu y Debian. Si eres nuevo en Ubuntu, consulta nuestra guía sobre cómo instalar Ubuntu 24.04 y herramientas útiles para comenzar con un sistema correctamente configurado.

Características clave:

  • Nativo de Ubuntu/Debian: Incorporado, no se requiere instalación adicional
  • Bibliotecas compartidas: Uso eficiente del disco mediante dependencias del sistema compartidas
  • Actualizaciones manuales: Tú controlas cuándo se actualizan los paquetes
  • Sin aislamiento: Los paquetes tienen acceso completo al sistema (adecuado para herramientas del sistema)
  • Ligero: No hay demonio en segundo plano, solo se ejecuta cuando se invoca
  • Ecosistema maduro: Décadas de desarrollo, extremadamente estable

Comparación de Gestores de Paquetes

Ubuntu admite varios sistemas de gestión de paquetes. Aquí se comparan las operaciones principales:

Operación APT Snap Flatpak
Buscar apt search keyword snap find keyword flatpak search keyword
Instalar sudo apt install package sudo snap install package flatpak install flathub app.id
Listar instalados apt list --installed snap list flatpak list --app
Mostrar información apt show package snap info package flatpak info app.id
Actualizar todo sudo apt update && sudo apt upgrade sudo snap refresh flatpak update
Actualizar uno solo sudo apt install --only-upgrade pkg sudo snap refresh package flatpak update app.id
Eliminar sudo apt remove package sudo snap remove package flatpak uninstall app.id
Limpiar sudo apt autoremove snap remove --revision=N flatpak uninstall --unused
Repositorio /etc/apt/sources.list Tienda de Snap (incorporada) Añadir con flatpak remote-add

Comparación rápida de características

Característica APT Snap Flatpak
Actualizaciones automáticas No No
Aislamiento No
Dependencias Bibliotecas del sistema Empaquetadas Runtimes compartidos
Tamaño del paquete Pequeño (5-50MB) Grande (50-500MB) Mediano (20-200MB)
Requiere raíz No (instalación de usuario)
Velocidad de inicio Rápida Más lenta Rápida
Mejor para Paquetes del sistema Aplicaciones universales Aplicaciones de escritorio

Acerca de esta guía

Esta guía se centra en APT (apt/apt-get/dpkg) - el sistema tradicional de gestión de paquetes de Ubuntu. APT es esencial para gestionar paquetes, bibliotecas y servicios en sistemas basados en Ubuntu y Debian.

Para otros gestores de paquetes:

Cada gestor de paquetes tiene sus fortalezas. Usa APT para paquetes del sistema y dependencias, Snap para compatibilidad entre versiones y actualizaciones automáticas, y Flatpak para aplicaciones de escritorio con permisos granulares.


Gestión de Paquetes APT - Guía Detallada

Entendiendo APT vs apt-get

APT (apt) - Elección Moderna

Introducido en Ubuntu 14.04, apt combina características de apt-get y apt-cache con una experiencia del usuario mejorada:

Ventajas:

  • Barras de progreso y salida con colores
  • Comandos más intuitivos
  • Salida más clara para lectura humana
  • Combina funcionalidad de múltiples herramientas

Cuándo usar: Operaciones interactivas diarias en línea de comandos

apt-get - Elección Tradicional

La herramienta original de gestión de paquetes, aún ampliamente utilizada:

Ventajas:

  • API más estable (mejor para scripts)
  • Compatibilidad hacia atrás
  • Formato de salida predecible
  • Control más fino

Cuándo usar: Scripts de shell, automatización, sistemas legados

Consejo profesional: Para una navegación más rápida en la terminal y mayor eficiencia en el flujo de trabajo, consulta nuestra guía de atajos de teclado para Ubuntu para mejorar tu productividad al gestionar paquetes.

Comandos Esenciales de Gestión de Paquetes

Actualizar Listas de Paquetes

Siempre actualiza las listas de paquetes antes de instalar o actualizar:

# Actualizar índice de paquetes
sudo apt update

# O con apt-get
sudo apt-get update

Este comando actualiza la base de datos local con información sobre paquetes disponibles y sus versiones desde los repositorios configurados.

Instalar Paquetes

Instalación básica:

# Instalar un solo paquete
sudo apt install package-name

# Instalar múltiples paquetes
sudo apt install package1 package2 package3

# Instalar una versión específica
sudo apt install package-name=version-number

Ejemplos:

# Instalar servidor web Nginx
sudo apt install nginx

# Instalar Python y pip
sudo apt install python3 python3-pip

# Instalar esenciales para compilación
sudo apt install build-essential

# Instalar herramientas de monitoreo del sistema
sudo apt install htop

Para necesidades de monitoreo especializadas, como el seguimiento del rendimiento de la GPU en sistemas con tarjetas NVIDIA, consulta nuestra guía sobre aplicaciones de monitoreo de GPU en Linux/Ubuntu.

Instalar sin solicitudes (útil para scripts):

sudo apt install -y package-name

# O
sudo DEBIAN_FRONTEND=noninteractive apt install -y package-name

Instalar desde un archivo .deb:

# Método 1: Usando apt (recomendado, maneja dependencias)
sudo apt install ./package.deb

# Método 2: Usando dpkg
sudo dpkg -i package.deb
sudo apt install -f  # Corregir dependencias faltantes

Nota: Al trabajar con archivos .deb descargados, puede que desees usar un gestor de archivos con un buen menú contextual. Consulta nuestra comparación de gestores de archivos para Ubuntu 24.04 (Nautilus vs Nemo vs Dolphin vs Caja) para encontrar uno que se adapte a tu flujo de trabajo.

Actualizar Paquetes

Actualizar paquetes instalados:

# Actualizar todos los paquetes (seguro, no elimina paquetes)
sudo apt upgrade

# Actualizar un paquete específico
sudo apt install --only-upgrade package-name

# Actualización completa (puede eliminar paquetes para resolver dependencias)
sudo apt full-upgrade

# Actualización de distribución (para actualizaciones a versiones mayores)
sudo apt dist-upgrade

Secuencia completa de actualización:

# Procedimiento recomendado de actualización
sudo apt update
sudo apt upgrade -y
sudo apt autoremove
sudo apt autoclean

Actualizar la versión de Ubuntu:

# Para actualizar de LTS a siguiente LTS
sudo do-release-upgrade

# Para cualquier actualización de versión
sudo do-release-upgrade -d

Listar Paquetes

Listar paquetes instalados:

# Todos los paquetes instalados
apt list --installed

# Con filtro grep
apt list --installed | grep package-name

# Contar paquetes instalados
apt list --installed | wc -l

# Usando dpkg
dpkg -l
dpkg --list
dpkg -l | grep package-name

Listar paquetes actualizables:

# Mostrar paquetes con actualizaciones disponibles
apt list --upgradable

# Simulación detallada de actualización
apt list --upgradable -a

Listar todos los paquetes disponibles:

# Todos los paquetes en los repositorios
apt list

# Listar desde un repositorio específico
apt list | grep "source-name"

Buscar Paquetes

Buscar nombres y descripciones de paquetes:

# Buscar con apt
apt search keyword

# Búsqueda insensible a mayúsculas
apt search -i keyword

# Mostrar solo nombres de paquetes
apt-cache search keyword

# Buscar solo nombres de paquetes (más rápido)
apt-cache search --names-only keyword

Ejemplos:

# Buscar editor
apt search text editor

# Buscar base de datos
apt search database

# Buscar paquetes de Python
apt search python | grep python3

Ver Información de Paquetes

Información detallada de paquetes:

# Mostrar detalles del paquete
apt show package-name

# Usando apt-cache
apt-cache show package-name

# Mostrar dependencias del paquete
apt-cache depends package-name

# Mostrar dependencias inversas
apt-cache rdepends package-name

# Verificar política y versiones del paquete
apt-cache policy package-name

# Mostrar estadísticas del paquete
apt-cache stats

Verificar si un paquete está instalado:

# Método 1
dpkg -s package-name

# Método 2
dpkg -l package-name

# Método 3
apt list --installed package-name

# Método 4 (código de salida 0 si instalado)
dpkg-query -W package-name

Eliminar Paquetes

Eliminar paquetes:

# Eliminar paquete (mantener archivos de configuración)
sudo apt remove package-name

# Eliminar paquete y archivos de configuración (purge)
sudo apt purge package-name

# Eliminar con dependencias
sudo apt autoremove package-name

# Eliminar completamente el paquete y configuraciones
sudo apt purge package-name && sudo apt autoremove

Limpiar el sistema:

# Eliminar dependencias no utilizadas
sudo apt autoremove

# Eliminar con purge
sudo apt autoremove --purge

# Eliminar archivos de paquetes descargados
sudo apt clean

# Eliminar versiones antiguas de paquetes
sudo apt autoclean

Verificar uso de disco:

# Verificar tamaño de caché
du -sh /var/cache/apt/archives

# Verificar tamaño total de paquetes
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n

Bloqueo de Paquetes (Prevenir actualizaciones)

Bloquear paquetes:

# Bloquear paquete en la versión actual
sudo apt-mark hold package-name

# Desbloquear paquete
sudo apt-mark unhold package-name

# Mostrar paquetes bloqueados
apt-mark showhold

# Bloquear múltiples paquetes
sudo apt-mark hold package1 package2 package3

Casos de uso: Prevenir que versiones específicas de software se actualicen automáticamente.

Usando dpkg - Herramienta de Gestión de Paquetes de Nivel Bajo

dpkg es el gestor de paquetes subyacente que APT utiliza:

Comandos básicos de dpkg:

# Instalar paquete
sudo dpkg -i package.deb

# Eliminar paquete
sudo dpkg -r package-name

# Purgar paquete
sudo dpkg -P package-name

# Listar paquetes instalados
dpkg -l

# Listar archivos en paquete
dpkg -L package-name

# Encontrar qué paquete posee un archivo
dpkg -S /path/to/file

# Verificar estado del paquete
dpkg -s package-name

# Reconfigurar paquete
sudo dpkg-reconfigure package-name

# Verificar integridad del paquete
dpkg -V package-name

Corregir paquetes rotos:

# Reconfigurar paquetes rotos
sudo dpkg --configure -a

# Corregir dependencias faltantes
sudo apt install -f

# Forzar reinstalación
sudo apt install --reinstall package-name

Gestión de Repositorios

Ver Repositorios

Ver repositorios configurados:

# Ver lista de fuentes
cat /etc/apt/sources.list

# Ver fuentes adicionales
ls /etc/apt/sources.list.d/

# Ver todos los repositorios habilitados
grep -r --include '*.list' '^deb ' /etc/apt/

Añadir Repositorios

Añadir PPA (Personal Package Archive):

# Añadir repositorio PPA
sudo add-apt-repository ppa:user/ppa-name
sudo apt update

# Ejemplo: Añadir PPA de Git
sudo add-apt-repository ppa:git-core/ppa
sudo apt update
sudo apt install git

Añadir repositorio manualmente:

# Añadir repositorio a sources.list
echo "deb http://repository-url distribution component" | sudo tee -a /etc/apt/sources.list.d/custom.list

# Añadir clave GPG
wget -qO - https://example.com/key.gpg | sudo apt-key add -

# Actualizar listas de paquetes
sudo apt update

Gestión moderna de claves (Ubuntu 22.04+):

# Descargar y añadir clave al keyring
wget -qO - https://example.com/key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/custom.gpg

# Añadir repositorio firmado
echo "deb [signed-by=/etc/apt/keyrings/custom.gpg] http://repo-url dist component" | sudo tee /etc/apt/sources.list.d/custom.list

Eliminar Repositorios

# Eliminar PPA
sudo add-apt-repository --remove ppa:user/ppa-name

# O eliminar el archivo de lista
sudo rm /etc/apt/sources.list.d/ppa-name.list

# Actualizar
sudo apt update

Gestores de Paquetes Alternativos

Ubuntu también admite Snap y Flatpak para empaquetamiento universal de aplicaciones:

  • Snap: Consulta nuestra guía completa sobre Gestor de Paquetes Snap para información detallada sobre instalación, uso, canales, confinamiento y solución de problemas.

  • Flatpak: Consulta nuestra guía completa sobre Gestor de Paquetes Flatpak para información detallada sobre instalación, Flathub, permisos, runtimes y gestión.

Gestión de Paquetes Avanzada

Simular Operaciones (Ejecución de prueba)

# Simular instalación
apt install -s package-name

# Simular actualización
apt upgrade -s

# Mostrar qué se instalaría
apt-cache showpkg package-name

Descargar Paquetes Sin Instalar

# Descargar solo el paquete
apt download package-name

# Descargar con dependencias
apt install --download-only package-name

# Descargar a directorio específico
cd /path/to/dir
apt download package-name

Encontrar Archivos de Paquetes

# Qué paquete proporciona un archivo
dpkg -S /path/to/file

# Buscar archivos en paquetes (incluyendo no instalados)
apt-file search filename

# Instalar apt-file primero
sudo apt install apt-file
sudo apt-file update

Bloqueo de Paquetes

Crear /etc/apt/preferences para controlar versiones de paquetes:

# Bloquear paquete a una versión específica
sudo nano /etc/apt/preferences

Añadir:

Package: package-name
Pin: version 1.2.3*
Pin-Priority: 1001

Verificar Vulnerabilidades de Paquetes

# Verificar actualizaciones de seguridad
sudo apt list --upgradable | grep security

# Verificar paquete específico para CVEs
apt-cache policy package-name

Solución de Problemas Comunes

Corregir Paquetes Rotos

# Método 1: Corregir dependencias
sudo apt install -f

# Método 2: Reconfigurar paquetes
sudo dpkg --configure -a

# Método 3: Limpiar y actualizar
sudo apt clean
sudo apt update
sudo apt upgrade

# Método 4: Corregir forzado
sudo apt --fix-broken install

Corregir “Base de datos bloqueada”

# Eliminar archivos de bloqueo (solo si no hay proceso de apt en ejecución!)
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/dpkg/lock
sudo rm /var/cache/apt/archives/lock
sudo dpkg --configure -a

Verificar procesos en ejecución primero:

ps aux | grep -i apt
sudo lsof /var/lib/dpkg/lock-frontend

Error de suma de hash

# Limpiar caché y reintentar
sudo apt clean
sudo rm -rf /var/lib/apt/lists/*
sudo apt update

Errores de GPG/Clave

# Reañadir clave
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEY_ID

# O descargar clave
wget -qO - https://repo-url/key.gpg | sudo apt-key add -

# Enfoque moderno (Ubuntu 22.04+)
wget -qO - https://repo-url/key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/repo.gpg

Dependencias no satisfechas

# Probar aptitude (mejor resolutor de dependencias)
sudo apt install aptitude
sudo aptitude install package-name

# O resolución manual
sudo apt install package-name package-dependency

Repositorio no encontrado (404)

# Actualizar a repositorio correcto
sudo nano /etc/apt/sources.list

# Cambiar nombre de versión antigua a actual
# O eliminar PPA obsoleto
sudo add-apt-repository --remove ppa:name/ppa

Buenas Prácticas

Mantenimiento Regular

Rutina semanal:

#!/bin/bash
# Script de actualización del sistema

echo "Actualizando listas de paquetes..."
sudo apt update

echo "Actualizando paquetes..."
sudo apt upgrade -y

echo "Eliminando paquetes no utilizados..."
sudo apt autoremove -y

echo "Limpiando caché de paquetes..."
sudo apt autoclean

echo "Actualización completa!"

Actualizaciones de Seguridad

Actualizaciones automáticas para parches de seguridad:

# Instalar unattended-upgrades
sudo apt install unattended-upgrades

# Configurar
sudo dpkg-reconfigure unattended-upgrades

# Editar configuración
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Configuración del servidor: Si estás gestionando Ubuntu Server, una configuración de red adecuada es esencial para descargas confiables de paquetes y actualizaciones del sistema. Aprende cómo cambiar una dirección IP estática en Ubuntu Server para garantizar una conectividad estable para tus operaciones de gestión de paquetes.

Backup de la Lista de Paquetes

Exportar paquetes instalados:

# Crear copia de seguridad
dpkg --get-selections > ~/package-list.txt

# O con paquetes instalados explícitamente
apt-mark showmanual > ~/manually-installed.txt

# Restaurar en otro sistema
sudo dpkg --set-selections < ~/package-list.txt
sudo apt-get dselect-upgrade

Verificar Salud del Sistema

# Verificar dependencias rotas
sudo apt check

# Verificar todos los paquetes
sudo debsums -c

# Verificar registros del sistema
journalctl -xe | grep -i apt
tail -f /var/log/apt/history.log

Optimización de Rendimiento

Descargas de Paquetes Más Rápidas

Habilitar descargas paralelas:

Editar /etc/apt/apt.conf.d/99parallel:

echo 'Acquire::Queue-Mode "host";' | sudo tee /etc/apt/apt.conf.d/99parallel
echo 'Acquire::http::Pipeline-Depth "5";' | sudo tee -a /etc/apt/apt.conf.d/99parallel

Usar el repositorio más rápido:

# Instalar apt-fast
sudo add-apt-repository ppa:apt-fast/stable
sudo apt update
sudo apt install apt-fast

# Usar apt-fast en lugar de apt
sudo apt-fast install package-name

Reducir Tamaño de Caché

# Limitar caché a 100MB
echo 'APT::Archives::MaxSize "100";' | sudo tee /etc/apt/apt.conf.d/99max-cache

Scripts Útiles de Gestión de Paquetes

Actualizar Todos los Gestores de Paquetes

#!/bin/bash
# Actualizar todos los gestores de paquetes

echo "=== Actualización de APT ==="
sudo apt update && sudo apt upgrade -y

echo "=== Actualización de Snap ==="
sudo snap refresh

echo "=== Actualización de Flatpak ==="
flatpak update -y

echo "Todos los sistemas actualizados!"

Encontrar Paquetes Grandes

# Listar los paquetes instalados más grandes
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -nr | head -20

# O formato más legible
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -nr | head -20 | awk '{printf "%.2f MB\t%s\n", $1/1024, $2}'

Auditoría de Paquetes

#!/bin/bash
# Auditoría del sistema de paquetes

echo "=== Estadísticas del sistema de paquetes ==="
echo "Paquetes instalados: $(dpkg -l | grep ^ii | wc -l)"
echo "Paquetes actualizables: $(apt list --upgradable 2>/dev/null | grep -c upgradable)"
echo "Paquetes bloqueados: $(apt-mark showhold | wc -l)"
echo "Autoeliminables: $(apt autoremove --dry-run | grep -Po '^\d+')"
echo "Tamaño de caché: $(du -sh /var/cache/apt/archives | cut -f1)"

Guía Rápida de Referencia

Comandos esenciales:

# Actualizar & Actualizar
sudo apt update && sudo apt upgrade -y

# Instalar paquete
sudo apt install package-name

# Eliminar paquete
sudo apt remove package-name

# Buscar paquete
apt search keyword

# Mostrar información del paquete
apt show package-name

# Listar instalados
apt list --installed

# Limpiar sistema
sudo apt autoremove && sudo apt autoclean

# Corregir paquetes rotos
sudo apt install -f && sudo dpkg --configure -a

Conclusión

Dominar el sistema de gestión de paquetes de Ubuntu es esencial para una administración del sistema eficiente. Ya sea que estés usando el moderno comando apt para sesiones interactivas, apt-get para scripting, o explorando paquetes universales con Snap y Flatpak, entender estas herramientas te ayudará a mantener un sistema Ubuntu seguro, actualizado y bien organizado.

Comienza con los comandos básicos, incorpora gradualmente técnicas avanzadas y siempre mantén tu sistema actualizado. El mantenimiento regular, combinado con buenas prácticas, garantiza una experiencia Ubuntu suave y confiable.

Consejo profesional: Siempre ejecuta sudo apt update antes de instalar o actualizar paquetes para asegurarte de que estás trabajando con la información más reciente de los paquetes!

Enlaces Útiles

Artículos Relacionados en Este Sitio