Chuleta

Comandos apt: instalación, actualización y eliminación de paquetes en Ubuntu y Debian

Actualizado: · Skillaria.Top

apt es el gestor de paquetes de Ubuntu y Debian: sudo apt update actualiza las listas de paquetes, sudo apt upgrade instala las actualizaciones, sudo apt install nombre instala un paquete, sudo apt remove lo elimina (purge lo hace junto con las configuraciones) y apt autoremove quita las dependencias que ya no se necesitan. Para buscar paquetes sirven apt search y apt show, y las dependencias rotas se reparan con sudo apt --fix-broken install.

apt es el gestor de paquetes estándar de Ubuntu, Debian y sus derivados (Linux Mint, Pop!_OS). Descarga programas de los repositorios, instala por su cuenta las dependencias y actualiza el sistema con un solo comando. A continuación tiene los comandos apt que se necesitan en el trabajo diario, agrupados por tarea, además de los errores típicos y cómo solucionarlos.

Cómo funciona apt

Un paquete es un archivo .deb con el programa, sus metadatos y la lista de dependencias. Los repositorios son servidores donde están los paquetes; sus direcciones se indican en /etc/apt/sources.list y en el directorio /etc/apt/sources.list.d/. apt guarda una copia local de la lista de paquetes disponibles y al instalar consulta precisamente esa copia, por eso conviene actualizarla con regularidad.

Por debajo, apt llama a dpkg, de bajo nivel, que descomprime y registra los paquetes pero no resuelve dependencias. Los comandos apt-get y apt-cache son la interfaz antigua con la misma funcionalidad: salida estable, cómoda en scripts. apt es un envoltorio más reciente pensado para personas: barra de progreso, colores y comandos más cortos.

Casi todos los comandos que modifican el sistema requieren privilegios de administrador, así que se ejecutan con sudo. La búsqueda y la consulta de información funcionan sin ellos.

Chuleta: comandos apt básicos

ComandoQué hace
sudo apt updateactualizar las listas de paquetes de los repositorios
sudo apt upgradeinstalar actualizaciones sin eliminar paquetes
sudo apt full-upgradeactualizar, eliminando o reemplazando paquetes si hace falta
sudo apt install paqueteinstalar un paquete con sus dependencias
sudo apt reinstall paquetereinstalar un paquete
sudo apt remove paqueteeliminar el paquete, conservando las configuraciones
sudo apt purge paqueteeliminar el paquete junto con sus configuraciones del sistema
sudo apt autoremoveeliminar las dependencias que ya no se necesitan
apt search palabrabuscar un paquete por nombre y descripción
apt show paquetedescripción, versión, dependencias y tamaño
apt list --installedlista de paquetes instalados
apt list --upgradablequé se puede actualizar
apt policy paqueteversión instalada, versiones disponibles y orígenes
sudo apt cleanvaciar la caché de los .deb descargados
sudo apt --fix-broken installreparar dependencias rotas

apt update y apt upgrade: cómo actualizar el sistema

Son dos operaciones distintas, y a menudo se confunden. apt update no instala nada: solo descarga las listas actuales de paquetes. apt upgrade instala las nuevas versiones de los programas ya instalados, basándose en esas listas.

$ sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
...
12 packages can be upgraded. Run 'apt list --upgradable' to see them.

$ apt list --upgradable
$ sudo apt upgrade

La combinación habitual para un servidor, en una sola línea y con confirmación automática:

sudo apt update && sudo apt upgrade -y

En qué se diferencia upgrade de full-upgrade

apt upgrade puede instalar nuevas dependencias, pero nunca elimina paquetes ya instalados. Si una actualización exige eliminar algo (por ejemplo, al cambiar la versión del kernel o de una biblioteca), esos paquetes se «retienen»: en la salida aparece la línea The following packages have been kept back. apt full-upgrade (equivalente a apt-get dist-upgrade) permite las eliminaciones y completa la actualización. Antes de ejecutarlo, lea con atención lo que apt pretende eliminar.

Actualizar solo un paquete

sudo apt install --only-upgrade nginx

Si el paquete no está instalado, el comando con --only-upgrade no lo instalará, lo que protege de instalaciones accidentales.

apt install: instalación de paquetes

sudo apt install nginx                 # un paquete
sudo apt install git curl htop         # varios a la vez
sudo apt install -y docker.io          # sin preguntar Y/n
sudo apt install nginx=1.24.0-2ubuntu7 # una versión concreta
sudo apt install --no-install-recommends ffmpeg  # sin paquetes recomendados
sudo apt install ./google-chrome-stable_current_amd64.deb  # un .deb local

Al instalar, apt muestra qué paquetes se añadirán y cuánto espacio ocuparán, y pide confirmación. La opción -y responde «sí» automáticamente: es cómoda en scripts y en Dockerfile, pero en el trabajo interactivo conviene leer la lista.

Por defecto apt instala no solo las dependencias obligatorias (Depends), sino también las recomendadas (Recommends). En servidores y contenedores, --no-install-recommends reduce notablemente el tamaño.

Instalar un archivo .deb: apt o dpkg -i

Un .deb descargado es mejor instalarlo con apt install ./archivo.deb; la ruta debe empezar con ./ o ser completa, si no apt buscará un paquete con ese nombre en el repositorio. A diferencia de dpkg -i, apt descarga por sí mismo las dependencias que falten. Si ya instaló el paquete con dpkg y obtuvo un error de dependencias, lo soluciona sudo apt --fix-broken install.

sudo dpkg -i package.deb
sudo apt --fix-broken install

apt remove, purge y autoremove: eliminación de paquetes

ComandoProgramaConfiguraciones en /etcDependencias
apt removese eliminase conservanse conservan
apt purgese eliminase eliminanse conservan
apt autoremove——se eliminan las que sobran
sudo apt remove nginx
sudo apt purge nginx            # lo mismo + configuraciones
sudo apt autoremove             # restos de dependencias
sudo apt autoremove --purge     # restos junto con sus configuraciones

remove sirve si piensa volver a usar el programa y quiere conservar sus ajustes. purge es para reinstalar desde cero. Tenga en cuenta que ninguno de estos comandos borra los archivos del directorio personal del usuario (por ejemplo, ~/.config).

Para encontrar paquetes eliminados que dejaron sus configuraciones, tienen estado rc:

dpkg -l | grep '^rc'

Búsqueda de paquetes e información sobre ellos

apt search postgresql          # búsqueda por nombre y descripción
apt search --names-only '^php8' # solo por nombre, con expresión regular
apt show htop                  # versión, tamaño, dependencias y descripción
apt policy docker.io           # qué versiones hay disponibles y de dónde
apt list --installed | grep python3
apt-cache depends curl         # de qué depende el paquete
apt-cache rdepends libssl3     # quién depende del paquete

A qué paquete pertenece un archivo

$ dpkg -S /usr/bin/curl
curl: /usr/bin/curl

$ dpkg -L curl        # qué archivos instaló el paquete

Si el comando aún no está en el sistema, Ubuntu al intentar ejecutarlo le indicará el paquete necesario (mensaje Command 'tree' not found, but can be installed with: sudo apt install tree). Para buscar archivos en paquetes no instalados existe la utilidad apt-file: apt-file search bin/dig tras ejecutar sudo apt-file update.

Fijar una versión: apt-mark hold

A veces un paquete no debe actualizarse: por ejemplo, la versión de un SGBD o del kernel en producción se cambia solo a mano. Para ello el paquete se «congela»:

sudo apt-mark hold postgresql-16
apt-mark showhold
sudo apt-mark unhold postgresql-16

Otro par útil son apt-mark manual y apt-mark auto. Los paquetes instalados como dependencia están marcados como automáticos y entrarán en autoremove cuando dejen de hacer falta. La marca manual protege el paquete de eso.

Repositorios: cómo añadirlos y dónde están

La lista de fuentes está en /etc/apt/sources.list y en los archivos /etc/apt/sources.list.d/*.list. En Ubuntu 24.04 y Debian 12 y posteriores se usa cada vez más el formato deb822, con extensión .sources (por ejemplo, /etc/apt/sources.list.d/ubuntu.sources).

Repositorio de terceros con clave

La forma actual es guardar la clave del repositorio aparte y vincularla mediante signed-by. El comando apt-key está obsoleto y en las versiones nuevas ya no existe.

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install docker-ce

PPA en Ubuntu

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo add-apt-repository --remove ppa:deadsnakes/ppa

Los PPA son repositorios personales en Launchpad. Añada solo los que sean de confianza: los paquetes de ahí se instalan con privilegios de root.

Caché y espacio en disco

Los paquetes descargados se quedan en /var/cache/apt/archives/. En discos pequeños y en imágenes de Docker conviene limpiar la caché.

du -sh /var/cache/apt/archives
sudo apt clean          # borrar toda la caché de .deb
sudo apt autoclean      # borrar solo las versiones obsoletas

En un Dockerfile, la instalación se escribe habitualmente en una sola capa y las listas de paquetes se eliminan en el mismo paso:

RUN apt-get update \
 && apt-get install -y --no-install-recommends curl ca-certificates \
 && rm -rf /var/lib/apt/lists/*

En los scripts se usa apt-get y no apt: la interfaz de apt no es estable y así lo advierte (WARNING: apt does not have a stable CLI interface). Para que el instalador no haga preguntas se añade DEBIAN_FRONTEND=noninteractive.

Errores típicos de apt y cómo corregirlos

Could not get lock /var/lib/dpkg/lock-frontend

Otro proceso ya trabaja con los paquetes: hay otra terminal con apt abierta, el «Centro de software» o las actualizaciones automáticas en segundo plano unattended-upgrades. Espere unos minutos y compruebe quién mantiene el bloqueo:

ps aux | grep -E 'apt|dpkg'

No borre a mano los archivos de bloqueo mientras el proceso esté vivo: una instalación interrumpida puede dejar el sistema en un estado inconsistente. Si el proceso está colgado o fue terminado, cuando acabe ejecute sudo dpkg --configure -a.

Unable to locate package

apt no encontró el paquete. Lo más común es que no se haya ejecutado sudo apt update en un sistema recién instalado, que el nombre esté mal escrito o que el paquete esté en un componente desactivado (universe en Ubuntu). El componente se activa con sudo add-apt-repository universe.

Unmet dependencies / held broken packages

Las dependencias no cuadran: normalmente tras instalar un .deb a mano o mezclar repositorios de versiones distintas de la distribución.

sudo apt --fix-broken install
sudo dpkg --configure -a
apt policy paquete-problematico

dpkg was interrupted

La instalación se interrumpió (se cerró la terminal, se cortó la corriente). El propio mensaje indica la solución: sudo dpkg --configure -a.

NO_PUBKEY al ejecutar apt update

El repositorio de terceros no tiene la clave de firma o está desactualizada. Descargue la clave actual de la web del proyecto a /etc/apt/keyrings/ e indíquela en signed-by, como en el ejemplo de Docker de arriba.

Actualizaciones automáticas de seguridad

En Ubuntu Server viene instalado por defecto el paquete unattended-upgrades, que instala por sí mismo las actualizaciones de seguridad. Para comprobarlo y activarlo:

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
cat /var/log/unattended-upgrades/unattended-upgrades.log

Si hace falta reiniciar tras una actualización, lo indica el archivo /var/run/reboot-required: si existe, se actualizó el kernel o bibliotecas clave.

Resumen

Los comandos apt básicos encajan en un ciclo corto: update antes de cualquier acción, install para instalar, upgrade para actualizar, remove o purge para eliminar y autoremove para limpiar. Para las versiones existen apt policy y apt-mark hold; para las roturas, --fix-broken install y dpkg --configure -a; y en los scripts, use apt-get. La gestión de paquetes se practica en el curso de Linux.

Preguntas frecuentes

¿En qué se diferencia apt de apt-get?

Son interfaces del mismo sistema de paquetes. apt es más cómodo para trabajar en la terminal (progreso, colores, comandos cortos), mientras que apt-get tiene una salida estable y se recomienda para scripts y Dockerfile.

¿Hace falta ejecutar apt update antes de cada instalación?

Es recomendable si las listas llevan mucho tiempo sin actualizarse: de lo contrario, apt puede no encontrar el paquete o intentar descargar una versión que ya no está en el espejo y dar un error 404.

¿Cómo ver el historial de instalaciones y eliminaciones de apt?

El historial se guarda en /var/log/apt/history.log (los registros antiguos están en los archivos history.log.N.gz), y el registro detallado de dpkg, en /var/log/dpkg.log.

¿Cómo volver a una versión anterior de un paquete?

Consulte las versiones disponibles con apt policy paquete, instale la que necesite con sudo apt install paquete=versión y fíjela con apt-mark hold para que la siguiente actualización no vuelva a subir la nueva.

¿Se puede usar apt en CentOS o Fedora?

No, allí el formato de paquetes es otro (rpm) y se usan gestores propios: dnf y yum. apt funciona en Debian, Ubuntu y las distribuciones derivadas de ellas.

Aprende este tema en vídeo

Este tema se explica a fondo y con práctica en el curso «Linux: с нуля до уверенного администрирования».

Ir al curso