apt es la interfaz de alto nivel para gestionar paquetes en Debian. Cuando ejecutas apt install nginx, no estás hablando directamente con el sistema de paquetes: apt resuelve dependencias, descarga los archivos .deb necesarios y luego delega la instalación real a dpkg, que es la capa baja que realmente desempaqueta y registra cada paquete en el sistema. apt existe porque dpkg solo sabe instalar lo que le das, sin resolver nada por su cuenta.
El detalle de diseño más importante que hay que entender desde el principio es que apt mantiene un índice local de paquetes disponibles, una caché de metadatos que vive en /var/lib/apt/lists/. Ese índice no se actualiza solo: cuando ejecutas apt install algo, apt busca en esa caché local, no en los servidores de Debian. Si la caché está desactualizada, puede decirte que un paquete no existe o instalar una versión vieja. Por eso el flujo correcto siempre empieza con apt update, que descarga los índices frescos de los repositorios configurados en /etc/apt/sources.list —pero no instala ni actualiza absolutamente nada, solo refresca esas listas.
Distingue bien entre apt upgrade y apt full-upgrade. El primero actualiza los paquetes instalados a versiones más nuevas, pero nunca elimina nada: si una actualización requiere quitar un paquete conflictivo, simplemente la salta. apt full-upgrade sí puede remover paquetes para resolver conflictos. En un escritorio o servidor de desarrollo puedes usar full-upgrade con tranquilidad; en producción, revisa siempre qué va a eliminar antes de confirmar.
Si no sabes exactamente el nombre de un paquete, apt search término busca en los índices locales por nombre y descripción. Una vez que encuentras el candidato, apt show paquete te da su versión, tamaño, dependencias y de qué repositorio proviene, todo antes de instalar nada.
Hay una advertencia que el propio apt te muestra cuando lo usas en un pipe o script: su formato de salida puede cambiar entre versiones de Debian sin previo aviso. Para scripts de producción, usa apt-get e apt-cache, cuya salida está diseñada para ser estable y parseada por máquinas. apt sin sufijo es para uso interactivo, con colores y barras de progreso, no para automatización.
Ejemplo completo: buscar, inspeccionar e instalar tree
# Primero, refrescamos el índice local. # Sin esto, los pasos siguientes trabajan con datos potencialmente obsoletos. apt update # Buscamos un paquete por nombre o descripción. # La búsqueda opera sobre el índice local que acabamos de actualizar. apt search "^tree$" # Inspeccionamos el paquete antes de tocarlo: # versión disponible, tamaño instalado, descripción, repositorio de origen. apt show tree # Instalamos. El flag -y evita la confirmación interactiva. # En un terminal normal, omite -y para revisar qué va a instalar. apt install -y tree # Verificamos que está disponible. tree --version # Desinstalamos, pero dejamos los archivos de configuración intactos # (en este caso tree no tiene config, pero el comportamiento es correcto). apt remove tree # Con purge eliminamos también cualquier archivo de configuración residual. # Útil para paquetes como nginx o postgresql donde la config importa. apt purge tree # Después de remover paquetes, pueden quedar dependencias huérfanas. # autoremove las identifica y elimina de forma segura. apt autoremove
Qué está pasando en cada paso
apt update no descarga paquetes: descarga los archivos Packages.gz e InRelease de cada repositorio en sources.list y los guarda en /var/lib/apt/lists/. Todo lo que viene después lo consulta ahí.
La búsqueda "^tree$" usa una expresión regular básica. Sin los anclajes ^ y $, apt search tree devuelve todo lo que mencione “tree” en nombre o descripción —una lista larga e inútil. Los anclajes limitan la búsqueda al nombre exacto del paquete.
apt show tree es el paso que conviene no saltarse: te dice la versión que vas a instalar y de qué repositorio viene (en Debian Bookworm, la sección main, contrib o non-free). Si esperabas una versión y aparece otra, es señal de que el índice está desactualizado o de que necesitas añadir un repositorio adicional.
La diferencia entre remove y purge tiene consecuencias reales: si instalas postgresql, lo configuras y luego haces apt remove postgresql, la configuración en /etc/postgresql/ sobrevive. Si después vuelves a instalar, el servicio arranca con tu configuración anterior, lo cual puede ser exactamente lo que quieres o exactamente lo que no quieres. purge parte de cero. Para paquetes sin configuración significativa como tree, la diferencia es irrelevante, pero el hábito de saber cuándo usar cada uno te ahorra sorpresas.
autoremove merece ejecutarse después de cada remove o purge: cuando instalaste tree, si apt trajo alguna dependencia adicional, esa dependencia ya no tiene razón de estar en el sistema. autoremove la detecta porque ningún paquete instalado la requiere ya y la elimina, manteniendo el sistema limpio sin que tengas que rastrear esas dependencias manualmente.
N° 53