← Terminal y Línea de Comandos en Linux Bloque 8 · Paquetes y estado del sistema · Tema 35 de 43

Tema 35

Administrar paquetes con apt

Desde el tema 2 venimos escribiendo sudo apt install como quien repite una fórmula: así llegaron tree, tldr, plocate y htop. Nunca buscamos un instalador en una página web, ni aceptamos un asistente, ni nos preguntamos de dónde venía el programa o quién garantizaba que fuera el auténtico. Ese es el modo en que Linux distribuye el software, y es distinto del que se conoce en otros sistemas. En este tema abrimos la fórmula: qué es un paquete, de dónde sale, qué hace apt con él y cómo se consulta, se actualiza y se quita todo lo que el sistema tiene instalado.

Para qué distribuciones vale este tema

apt es el gestor de paquetes de Debian y de todas las distribuciones que derivan de ella: Ubuntu, Linux Mint, Pop!_OS, Raspberry Pi OS, Kali. Los ejemplos están tomados de Ubuntu 24.04. Si usas Fedora, Arch u otra familia, las ideas de las secciones 1 y 2 son las mismas y cambian los comandos: los vemos en el tema 36.

1. Qué es un paquete

Un programa instalado no es un archivo: es un conjunto de archivos repartidos por el árbol de directorios, según el reparto que estudiamos en el tema 8. El ejecutable va en /usr/bin, sus bibliotecas en /usr/lib, su configuración en /etc, su página de manual en /usr/share/man. Instalar a mano significaría copiar cada uno a su lugar, y desinstalar, recordar dónde quedó cada uno.

Un paquete es un archivo único que contiene todos los archivos de un programa, junto con la información necesaria para instalarlo: su nombre, su versión, una descripción, la lista de otros paquetes que necesita para funcionar y unas instrucciones que se ejecutan al instalar y al quitar.

En Debian y Ubuntu los paquetes tienen la extensión .deb, y su nombre sigue un esquema fijo:

anatomía del nombre de un paquete
ncdu_1.19-0.1_amd64.deb
 │     │   │    │
 │     │   │    └─ la arquitectura: amd64 es un PC de 64 bits; «all», cualquiera
 │     │   └─ la revisión: los ajustes que le hizo la distribución
 │     └─ la versión del programa, tal como la publicaron sus autores
 └─ el nombre del paquete

El nombre del paquete es lo que se escribe en los comandos: apt install ncdu. Va siempre en minúsculas, y no siempre coincide con el del comando que instala: el paquete coreutils contiene ls, cp, sort y un centenar de programas más, y el comando top viene en el paquete procps.

No todos los paquetes contienen un programa. Unos traen bibliotecas, que son código compartido entre varios programas, y suelen llamarse libalgo; otros, datos, documentación o traducciones, como el manpages-es del tema 4. Un sistema Ubuntu de escritorio recién instalado tiene alrededor de dos mil paquetes, y de ellos apenas unas decenas son aplicaciones que se abren desde un menú.

Lo que guarda un paquetePara qué sirve
Los archivos, cada uno con su ruta de destino, su dueño y sus permisos.Instalar es desempaquetarlos en su lugar.
Los metadatos: nombre, versión, arquitectura, descripción, responsable.Poder buscarlo, y saber si hay una versión más nueva.
Las dependencias: qué otros paquetes necesita.Instalar también lo que le hace falta.
Los archivos de configuración, señalados como tales.No pisar, al actualizar, los cambios que hizo el administrador.
Los scripts de instalación.Tareas que acompañan a la copia: crear un usuario, iniciar un servicio.

2. Repositorios y gestor de paquetes

Los paquetes no se buscan uno por uno en Internet. Cada distribución los publica, ya preparados y probados para esa versión del sistema, en servidores propios.

Un repositorio es un servidor que almacena paquetes y publica un índice con la lista de todos ellos. Un gestor de paquetes es el programa que consulta esos índices, descarga los paquetes, resuelve sus dependencias, los instala, los actualiza y los quita, llevando el registro de todo.

El recorrido de un paquete: del repositorio en Internet lo descarga apt, que resuelve las dependencias; dpkg lo desempaqueta y lo registra; y los archivos quedan en el sistema Repositorio un servidor en Internet miles de .deb apt consulta el índice resuelve dependencias descarga y verifica dpkg desempaqueta configura registra Tu sistema /usr/bin /usr/lib /etc … el origen el gestor de paquetes, en dos niveles el destino
Un solo comando, apt install, recorre todo el camino. Las dos cajas del centro son los programas que trabajan en tu máquina.

El modelo tiene consecuencias que conviene decir en voz alta, porque son la diferencia con bajar un instalador de una página:

PropiedadQué significa en la práctica
Un origen único y verificadoLos índices del repositorio van firmados, y apt comprueba la firma y la integridad de cada paquete antes de instalarlo. No hay que juzgar si un sitio de descargas es de fiar.
Dependencias resueltasSi un programa necesita tres bibliotecas, se instalan con él, sin que haya que saber cuáles son.
Una sola actualización para todoEl mismo comando pone al día el sistema y todas las aplicaciones. Ningún programa necesita su propio actualizador.
Desinstalación limpiaEl sistema sabe qué archivos pertenecen a cada paquete, y los quita todos.
Bibliotecas compartidasUna biblioteca se instala una vez y la usan todos los programas que la necesitan. Corregirle un fallo de seguridad los corrige a todos.

La contrapartida es que la versión disponible de un programa es la que la distribución empaquetó para esa versión del sistema, que no siempre es la última publicada por sus autores. Ubuntu 24.04 recibirá durante años correcciones de seguridad para sus paquetes, pero no saltos de versión. Es una decisión deliberada, que favorece la estabilidad; las maneras de conseguir versiones más nuevas aparecen en la sección 11 y en el tema 36.

3. apt, apt-get y dpkg: quién es quién

En la documentación y en los foros aparecen varios comandos para lo mismo. No son alternativas rivales: son capas, y cada una se apoya en la de abajo.

HerramientaNivelQué haceCuándo se usa
dpkgBajoInstala, quita y consulta paquetes .deb que ya están en el disco. No conoce los repositorios ni resuelve dependencias.Para consultar lo instalado. Sección 7.
apt-get, apt-cacheAltoLos comandos clásicos: descargan de los repositorios y resuelven dependencias. Su salida y sus opciones no cambian de una versión a otra.En scripts.
aptAltoReúne lo más usado de los dos anteriores en un solo comando, con barra de progreso, colores y mensajes más claros.En la terminal, a mano. Es el de este tema.

apt es un comando con subcomandos, como los que anticipamos en el tema 3: la primera palabra después de apt indica la operación, y cada una tiene sus opciones.

la forma general
sudo apt install -y mc ncdu
 │    │     │     │    │
 │    │     │     │    └─ los paquetes sobre los que actúa
 │    │     │     └─ opciones del subcomando
 │    │     └─ el subcomando: qué hacer
 │    └─ el gestor
 └─ hace falta ser root para modificar el sistema

La regla sobre sudo es simple y se desprende del tema 19: instalar, actualizar y quitar escriben en /usr, /etc y /var, que son de root. Consultar no modifica nada, y cualquier usuario puede hacerlo.

Sin sudo: consultanCon sudo: modifican
apt search, apt show, apt list, apt policy, apt dependsapt update, apt install, apt upgrade, apt remove, apt purge, apt autoremove
dpkg -l, dpkg -L, dpkg -S, dpkg -sdpkg -i, dpkg -r

Cuando la salida de apt se envía a una tubería o a un archivo, aparece una advertencia: WARNING: apt does not have a stable CLI interface. Use with caution in scripts. No es un error. Avisa que el formato de lo que apt escribe puede cambiar con las versiones, y que un script que lo analice debería usar apt-get o dpkg. Para un filtro ocasional en la terminal se la puede ignorar, o descartar con 2> /dev/null.

4. apt update: poner al día la lista

apt no pregunta al repositorio en cada operación. Trabaja con una copia local del índice, guardada en /var/lib/apt/lists, y esa copia envejece: cada día se publican versiones nuevas que tu máquina todavía no conoce. El primer paso de cualquier sesión de instalación es renovarla.

terminal
$ sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
Get:3 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
Hit:4 http://archive.ubuntu.com/ubuntu noble-backports InRelease
Get:5 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages [1,412 kB]
…
Fetched 3,871 kB in 2s (1,935 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
42 packages can be upgraded. Run 'apt list --upgradable' to see them.
En la salidaSignifica
HitEse índice no cambió desde la última vez: no se descarga.
GetHay una versión nueva del índice, y se la descarga. Entre corchetes, su tamaño.
IgnEse archivo no existe en el servidor y se lo pasa por alto. Es normal.
ErrNo se pudo consultar ese repositorio. Hay que leer el mensaje.
noble, noble-updates, noble-securityLas secciones del repositorio. noble es el nombre en clave de Ubuntu 24.04. Sección 11.
La última líneaCuántos paquetes instalados tienen una versión más nueva disponible.
apt update no actualiza ningún programa

Es la confusión más frecuente del tema, y el nombre no ayuda. apt update actualiza la lista de paquetes disponibles: después de ejecutarlo, tu sistema tiene exactamente los mismos programas, en las mismas versiones. El que instala las versiones nuevas es apt upgrade, que vemos en la sección 8. El primero averigua qué hay; el segundo lo trae.

Conviene ejecutarlo antes de instalar algo, si pasaron más de unas horas desde la última vez. Con una lista vieja, apt install puede pedir al servidor una versión que ya fue reemplazada, y terminar en un error 404 Not Found.

5. Buscar y conocer un paquete

Antes de instalar hay que saber cómo se llama el paquete, y conviene saber qué trae. Tres subcomandos de consulta, que no necesitan sudo, responden a eso.

apt search: encontrar por palabras

apt search busca en los nombres y en las descripciones de todos los paquetes disponibles, instalados o no. El argumento es una expresión regular, como las del tema 28.

terminal
$ apt search "file manager" | wc -l
214
$ apt search --names-only '^mc'
Sorting... Done
Full Text Search... Done
mc/noble-updates 3:4.8.30-1ubuntu0.1 amd64
  Midnight Commander - a powerful file manager

mc-data/noble-updates 3:4.8.30-1ubuntu0.1 all
  Midnight Commander - a powerful file manager -- data files

mcabber/noble 1.1.2-2build3 amd64
  small Jabber (XMPP) console client
…

Cada resultado ocupa dos líneas: en la primera, el nombre, la sección del repositorio, la versión y la arquitectura; en la segunda, la descripción breve. Si el paquete ya está instalado, la primera línea termina con [installed]. Como una búsqueda por descripción devuelve demasiado, --names-only la limita a los nombres, y siempre queda el recurso de filtrar con grep.

apt show: la ficha de un paquete

terminal
$ apt show mc
Package: mc
Version: 3:4.8.30-1ubuntu0.1
Priority: optional
Section: universe/utils
Origin: Ubuntu
Installed-Size: 1,563 kB
Depends: libc6 (>= 2.38), libglib2.0-0t64 (>= 2.75.3), libgpm2 (>= 1.20.7), libslang2 (>= 2.2.4), libssh2-1t64 (>= 1.11.0), mc-data (= 3:4.8.30-1ubuntu0.1)
Recommends: mime-support, perl, unzip
Suggests: arj, bzip2, catdvi, dbview, djvulibre-bin, file, genisoimage, …
Homepage: https://midnight-commander.org
Download-Size: 547 kB
APT-Sources: http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages
Description: Midnight Commander - a powerful file manager
 GNU Midnight Commander is a text-mode full-screen file manager. It
 uses a two panel interface and a subshell for command execution.
 …
CampoQué dice
VersionLa versión que se instalaría. Su forma se explica más abajo.
SectionEl componente del repositorio y la categoría: universe/utils.
Installed-SizeLo que ocupará en el disco, una vez desempaquetado.
Download-SizeLo que pesa el .deb, que está comprimido.
DependsLos paquetes imprescindibles: sin ellos no funciona, y se instalan siempre.
RecommendsLos que casi todo el mundo quiere tener junto con este. apt los instala por defecto.
SuggestsLos que amplían sus funciones. No se instalan: son una sugerencia.
APT-SourcesDe qué repositorio saldría.
DescriptionLa descripción completa.

Entre paréntesis, junto a cada dependencia, va la versión exigida: libc6 (>= 2.38) se lee «libc6, en la versión 2.38 o posterior». La barra vertical, cuando aparece, separa alternativas: cualquiera de ellas satisface el requisito.

El número de versión tiene hasta tres partes:

anatomía de una versión
3:4.8.30-1ubuntu0.1
│   │        │
│   │        └─ la revisión del paquete: «1» de Debian, «ubuntu0.1» de Ubuntu
│   └─ la versión del programa: Midnight Commander 4.8.30
└─ la época: un número que solo sirve para ordenar, y casi nunca aparece

Cuando Ubuntu corrige un fallo de seguridad en un paquete, lo habitual es que cambie la tercera parte y no la segunda: el programa sigue siendo el 4.8.30, con la corrección aplicada.

apt list: listas con filtro

apt list muestra paquetes, uno por línea, y admite comodines en el nombre. Sus tres filtros cubren las preguntas habituales:

terminal
$ apt list --installed 2> /dev/null | wc -l     # cuántos paquetes hay instalados
1847
$ apt list --installed 'python3-apt*' 2> /dev/null
Listing...
python3-apt/noble-updates,now 2.7.7ubuntu5 amd64 [installed,automatic]
$ apt list --upgradable 2> /dev/null | head -n 4
Listing...
curl/noble-updates,noble-security 8.5.0-2ubuntu10.6 amd64 [upgradable from: 8.5.0-2ubuntu10.4]
libcurl4t64/noble-updates,noble-security 8.5.0-2ubuntu10.6 amd64 [upgradable from: 8.5.0-2ubuntu10.4]
openssl/noble-updates,noble-security 3.0.13-0ubuntu3.6 amd64 [upgradable from: 3.0.13-0ubuntu3.5]

El 2> /dev/null descarta la advertencia de la sección 3, que va por el canal de errores. Entre corchetes, al final de cada línea, queda el estado: installed, automatic si llegó como dependencia de otro, y upgradable from con la versión que hoy está instalada.

Quiero saber…Comando
Cómo se llama el paquete de un programa del que sé para qué sirveapt search palabras
Qué trae y qué necesita un paqueteapt show paquete
Si está instalado, y en qué versiónapt list --installed paquete
Qué versión tengo y cuál se instalaríaapt policy paquete
Qué se puede actualizarapt list --upgradable

6. apt install: instalar

Ubuntu ayuda a encontrar el paquete aun antes de buscarlo. Al escribir un comando que no existe pero que algún paquete conocido contiene, la shell lo dice:

terminal
$ mc
Command 'mc' not found, but can be installed with:
sudo apt install mc

Midnight Commander es un administrador de archivos de dos paneles para la terminal, y nos sirve de ejemplo porque no viene instalado, es útil y arrastra dependencias. Lo instalamos, y esta vez leemos todo lo que apt anuncia antes de actuar:

terminal
$ sudo apt install mc
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libssh2-1t64 mc-data
Suggested packages:
  arj catdvi | texlive-binaries dbview djvulibre-bin epub-utils genisoimage …
The following NEW packages will be installed:
  libssh2-1t64 mc mc-data
0 upgraded, 3 newly installed, 0 to remove and 42 not upgraded.
Need to get 1,967 kB of archives.
After this operation, 7,951 kB of additional disk space will be used.
Do you want to continue? [Y/n] 
LíneaQué informa
The following additional packages will be installedLas dependencias que faltan en este sistema. Se pidió un paquete y se instalarán tres.
Suggested packagesLos sugeridos, que no se instalan. Es solo información.
The following NEW packages will be installedLa lista completa de lo que se agrega.
0 upgraded, 3 newly installed, 0 to remove and 42 not upgradedEl balance: cuántos se actualizan, cuántos se agregan, cuántos se quitan, y cuántos quedan pendientes de actualizar.
Need to get 1,967 kB of archivesCuánto se va a descargar.
After this operation, 7,951 kB of additional disk space will be usedCuánto ocupará una vez instalado.
Do you want to continue? [Y/n]La confirmación. La mayúscula indica la respuesta por defecto: Enter equivale a Y.
Antes de aceptar, mira cuántos paquetes se quitan

En el balance, el número que merece atención es el de to remove. Para instalar algo, apt a veces necesita quitar paquetes que son incompatibles con lo pedido, y lo anuncia con una lista encabezada por The following packages will be REMOVED. Casi siempre es razonable. Pero si esa lista es larga, o nombra piezas del escritorio o del sistema, hay que responder n y averiguar qué pasa antes de seguir. La pregunta existe para eso.

Al aceptar, apt descarga los tres .deb, verifica su integridad y se los entrega a dpkg, que los desempaqueta y los configura en el orden correcto: primero las dependencias, al final el paquete que las necesita.

terminal: continúa
Get:1 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libssh2-1t64 amd64 1.11.0-4.1build2 [120 kB]
Get:2 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 mc-data all 3:4.8.30-1ubuntu0.1 [1,300 kB]
Get:3 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 mc amd64 3:4.8.30-1ubuntu0.1 [547 kB]
Fetched 1,967 kB in 1s (1,823 kB/s)
Selecting previously unselected package libssh2-1t64:amd64.
(Reading database ... 201536 files and directories currently installed.)
Preparing to unpack .../libssh2-1t64_1.11.0-4.1build2_amd64.deb ...
Unpacking libssh2-1t64:amd64 (1.11.0-4.1build2) ...
…
Setting up mc (3:4.8.30-1ubuntu0.1) ...
Processing triggers for man-db (2.12.0-4build2) ...
$ type mc
mc is /usr/bin/mc

Las líneas Processing triggers son tareas que otros paquetes piden que se ejecuten cuando algo cambia: aquí, man-db actualiza el índice de páginas de manual para que man mc funcione enseguida. El programa queda listo para usar, sin reiniciar nada. Se abre con mc y se cierra con F10.

Las formas y opciones de apt install que conviene conocer:

Se escribeEfecto
apt install a b cInstala varios paquetes en una sola operación.
apt install -y paqueteResponde «sí» a la confirmación. Cómodo, y por lo dicho recién, mejor reservarlo para lo que ya se sabe qué hará.
apt install -s paqueteSimula: muestra lo que haría y no hace nada. No necesita sudo.
apt install --no-install-recommends paqueteInstala solo las dependencias estrictas, sin los recomendados. Para instalaciones mínimas.
apt install --reinstall paqueteVuelve a instalar la misma versión: repone archivos del paquete borrados o dañados.
apt install paquete=versiónInstala una versión determinada, si el repositorio la tiene.
apt install ./archivo.debInstala un paquete que está en el disco. Sección 12.

Pedir un paquete que ya está instalado no es un error. Si hay una versión más nueva, apt install lo actualiza a él solo; si no, responde mc is already the newest version y termina. Y los nombres se completan con Tab, como vimos en el tema 5: apt install mc-[Tab][Tab] lista los que empiezan así.

7. Consultar lo instalado con dpkg

Toda instalación queda anotada en una base de datos, en /var/lib/dpkg: qué paquetes hay, en qué versión, y qué archivos puso cada uno. dpkg es quien la consulta, y sus cuatro preguntas son de las más útiles del tema.

dpkg -l: qué hay instalado

terminal
$ dpkg -l mc
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version              Architecture Description
+++-==============-====================-============-============================================
ii  mc             3:4.8.30-1ubuntu0.1  amd64        Midnight Commander - a powerful file manager

El encabezado, que parece un jeroglífico, es la leyenda de las dos letras con que empieza cada línea. La primera es el estado deseado, y la segunda, el estado real.

LetrasSignifica
iiSe quiere instalado, y lo está. Es el estado normal.
rcSe quitó, pero quedaron sus archivos de configuración. Sección 9.
unSe lo conoce, pero no está instalado.
hiInstalado y retenido: no se actualizará. Sección 10.
iU, iFLa instalación quedó a medias: desempaquetado y sin configurar. Hay algo que reparar.

Sin argumentos, dpkg -l lista todos los paquetes; el argumento puede llevar comodines, entre comillas para que no los expanda la shell: dpkg -l 'mc*'. Y como la salida es texto en columnas, se le aplica todo el bloque 6:

terminal
$ dpkg -l | grep -c '^ii'                  # cuántos paquetes instalados
1850
$ dpkg -l | awk '/^ii/ {print $2}' | grep '^python3' | wc -l
87

dpkg -L: qué archivos trajo un paquete

terminal
$ dpkg -L mc | wc -l
61
$ dpkg -L mc | grep '/bin/'
/usr/bin/mc
/usr/bin/mcdiff
/usr/bin/mcedit
/usr/bin/mcview
$ dpkg -L mc | grep man1
/usr/share/man/man1
/usr/share/man/man1/mc.1.gz
/usr/share/man/man1/mcedit.1.gz
/usr/share/man/man1/mcview.1.gz

Es la pregunta que se hace después de instalar algo: «¿qué comandos me trajo?». Aquí la respuesta es que, además de mc, llegaron un editor, mcedit, y un visor, mcview. Sirve también para encontrar dónde quedó la configuración de un paquete, filtrando por /etc, o su documentación, por /usr/share/doc.

dpkg -S: a qué paquete pertenece un archivo

La pregunta inversa. Dado un archivo del sistema, cuál fue el paquete que lo instaló:

terminal
$ dpkg -S /usr/bin/sort
coreutils: /usr/bin/sort
$ dpkg -S "$(which top)"
procps: /usr/bin/top
$ dpkg -S /etc/hostname
dpkg-query: no path found matching pattern /etc/hostname

El segundo ejemplo usa la sustitución de comandos del tema 25:which top escribe la ruta del programa, y esa ruta pasa a ser el argumento de dpkg -S. El tercero muestra el límite de la consulta: /etc/hostname no pertenece a ningún paquete, porque lo creó el instalador del sistema. Lo mismo ocurre con todo lo que hay en /home y con lo que se haya instalado a mano en /usr/local, que es precisamente el lugar reservado para lo que el gestor de paquetes no administra.

dpkg -s: el estado de un paquete

dpkg -s paquete muestra la ficha de un paquete instalado, tomada de la base local: es parecida a la de apt show, con una línea Status: install ok installed. Su uso más práctico es como pregunta de sí o no, por el código de salida del tema 25:

terminal
$ dpkg -s mc > /dev/null 2>&1 && echo "instalado" || echo "falta"
instalado
$ dpkg -s ncdu > /dev/null 2>&1 && echo "instalado" || echo "falta"
falta
PreguntaComando
¿Está instalado, y en qué versión?dpkg -l paquete
¿Qué archivos instaló este paquete?dpkg -L paquete
¿Qué paquete instaló este archivo?dpkg -S /ruta/del/archivo
¿Cuál es su ficha y su estado?dpkg -s paquete

La mayúscula importa: -l lista paquetes, -L lista los archivos de uno; -s da el estado, -S busca un archivo. Y las cuatro consultan solo lo instalado. Para saber qué paquete traería un archivo que todavía no tienes existe apt-file search nombre, del paquete apt-file.

8. apt upgrade: actualizar el sistema

Mantener el sistema al día son dos comandos, siempre en el mismo orden. El primero averigua qué hay de nuevo; el segundo lo instala.

terminal
$ sudo apt update
…
42 packages can be upgraded. Run 'apt list --upgradable' to see them.
$ sudo apt upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic
The following packages will be upgraded:
  curl libcurl4t64 libssl3t64 openssl python3-apt tzdata …
39 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 86.4 MB of archives.
After this operation, 1,024 kB of additional disk space will be used.
Do you want to continue? [Y/n] 

La salida tiene la misma estructura que la de install, con el mismo balance y la misma pregunta. Es la forma que anotamos en el tema 25, sudo apt update && sudo apt upgrade: el && hace que el segundo se ejecute solo si el primero funcionó.

La línea kept back señala paquetes que no se actualizaron, y tiene que ver con una regla de prudencia: apt upgrade actualiza lo instalado e instala lo nuevo que haga falta, pero nunca quita un paquete. Cuando una actualización exige quitar otro, la deja pendiente. Para esos casos hay una variante más decidida.

ComandoActualiza lo instaladoInstala paquetes nuevosQuita paquetes
apt upgradeSíSí, si una actualización los necesitaNunca
apt full-upgradeSíSíSí, si hace falta para completar la actualización

apt upgrade es el de todos los días. apt full-upgrade se usa cuando quedan paquetes retenidos, leyendo antes de aceptar la lista de lo que quitaría. En Ubuntu puede aparecer además el mensaje The following upgrades have been deferred due to phasing: son actualizaciones que se distribuyen por tandas, a un porcentaje de las máquinas cada día, para detectar problemas antes de que lleguen a todas. No hay nada que hacer: se instalarán solas en los días siguientes.

Ninguno de los dos cambia la versión de la distribución. Pasar de Ubuntu 24.04 a la siguiente es otra operación, con su propio comando, do-release-upgrade.

Cuándo hay que reiniciar

Una actualización reemplaza los archivos en el disco, pero los programas que ya están en ejecución siguen usando la copia vieja que tienen en memoria, como vimos con el entorno en el tema 34. Para una aplicación, alcanza con cerrarla y abrirla. Para el kernel y para algunas bibliotecas fundamentales, hace falta reiniciar, y el sistema lo avisa creando un archivo:

terminal
$ cat /var/run/reboot-required
*** System restart required ***
$ cat /var/run/reboot-required.pkgs
linux-image-6.8.0-87-generic
libc6

Si el archivo no existe, cat responde No such file or directory, y no hay nada pendiente. Es uno de los pocos casos en que Linux pide un reinicio, y nunca lo fuerza: se hace cuando convenga.

  1. Renovar la lista: sudo apt update. averiguar
  2. Ver qué cambiaría, si se quiere saber antes: apt list --upgradable. revisar
  3. Actualizar: sudo apt upgrade, leyendo el balance antes de aceptar. aplicar
  4. Limpiar lo que quedó sin uso: sudo apt autoremove. Sección 9. ordenar

Ubuntu trae activado un servicio, unattended-upgrades, que instala por su cuenta las correcciones de seguridad una vez al día. Por eso un sistema que nadie actualiza a mano no queda del todo desprotegido, y por eso apt a veces responde que otro proceso tiene la base de datos ocupada: es ese servicio trabajando, como veremos en la sección 14.

9. Desinstalar: remove, purge y autoremove

Quitar un paquete tiene dos grados, y un tercer comando que limpia lo que los otros dejan.

terminal
$ sudo apt remove mc
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libssh2-1t64 mc-data
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
  mc
0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded.
After this operation, 1,563 kB disk space will be freed.
Do you want to continue? [Y/n] 

Se quitó mc y nada más. Los dos paquetes que habían llegado con él siguen instalados, y apt lo señala en las líneas resaltadas: entraron como dependencias, y ya nadie los necesita. Para eso está autoremove:

terminal
$ sudo apt autoremove
…
The following packages will be REMOVED:
  libssh2-1t64 mc-data
0 upgraded, 0 newly installed, 2 to remove and 3 not upgraded.
After this operation, 6,388 kB disk space will be freed.
Do you want to continue? [Y/n] 

Queda todavía un rastro, y es intencional. remove borra los programas pero conserva los archivos de configuración que el paquete había puesto en /etc, por si se lo vuelve a instalar: los ajustes que hayas hecho seguirán allí. Es el estado rc de la sección 7.

terminal
$ dpkg -l | grep '^rc'
rc  mc-data        3:4.8.30-1ubuntu0.1  all          Midnight Commander - a powerful file manager -- data files
$ ls /etc/mc | head -n 3
edit.indent.rc
filehighlight.ini
mc.default.keymap
$ sudo apt purge mc-data
…
The following packages will be REMOVED:
  mc-data*
…
$ ls /etc/mc
ls: cannot access '/etc/mc': No such file or directory

El asterisco junto al nombre, en la lista de purge, indica que el paquete se quitará con su configuración incluida.

ComandoQuita los programasQuita la configuración de /etcSe usa para
apt remove paqueteSíNoQuitar algo que quizá vuelva a instalarse.
apt purge paqueteSíSíQuitarlo del todo, o volver a empezar con la configuración original.
apt autoremoveQuita las dependencias que quedaron sin nadie que las use.Después de desinstalar o de actualizar.
apt autoremove --purgeLo mismo, con su configuración.Una limpieza completa.
apt remove --autoremove paqueteQuita el paquete y sus dependencias huérfanas en un solo paso.Deshacer una instalación.
Ninguno toca tu directorio personal

El gestor de paquetes administra los archivos que instaló, y la configuración del sistema en /etc. Lo que el programa haya escrito en tu directorio personal mientras lo usabas —sus preferencias en ~/.config, su caché en ~/.cache, sus datos en ~/.local/share— no pertenece a ningún paquete, y ni purge lo borra. Es lo correcto: son tus datos. Si de verdad se quiere empezar de cero con un programa, esos directorios se borran a mano; en el caso de Midnight Commander, ~/.config/mc.

autoremove merece la misma lectura atenta que install. La lista que propone suele tener bibliotecas huérfanas y versiones viejas del kernel, que Ubuntu acumula con cada actualización y conviene ir quitando. Pero se basa en una anotación —la de la sección siguiente—, y si esa anotación está equivocada puede ofrecer quitar algo que usas.

10. Dependencias, manuales y automáticos

Una dependencia es un paquete que otro necesita para funcionar. apt anota, para cada paquete instalado, si se lo pidió el usuario —manual— o si entró para satisfacer a otro —automático—. Un paquete automático del que ya no depende nadie es candidato a autoremove.

Volvemos a instalar el ejemplo, para mirarlo por dentro:

terminal
$ sudo apt install -y mc > /dev/null 2>&1
$ apt depends mc
mc
  Depends: libc6 (>= 2.38)
  Depends: libglib2.0-0t64 (>= 2.75.3)
  Depends: libgpm2 (>= 1.20.7)
  Depends: libslang2 (>= 2.2.4)
  Depends: libssh2-1t64 (>= 1.11.0)
  Depends: mc-data (= 3:4.8.30-1ubuntu0.1)
  Recommends: <mime-support>
  Recommends: perl
  Recommends: unzip
  Suggests: arj
  …
$ apt rdepends --installed mc-data
mc-data
Reverse Depends:
  Depends: mc (= 3:4.8.30-1ubuntu0.1)

apt depends responde «¿qué necesita este paquete?»; apt rdepends, la inversa, «¿quién necesita a este?», que es la pregunta que hay que hacerse antes de quitar una biblioteca. De las seis dependencias de mc, cuatro ya estaban en el sistema porque otros programas las usan; por eso la instalación agregó solo dos.

La anotación de manual o automático se consulta y se cambia con apt-mark:

terminal
$ apt-mark showmanual | grep -E '^(mc|htop|tree)'
htop
mc
tree
$ apt-mark showauto | grep -E '^(mc|libssh2)'
libssh2-1t64
mc-data
ComandoEfecto
apt-mark showmanualLista los paquetes pedidos expresamente. Es, en la práctica, el inventario de lo que elegiste instalar.
apt-mark showautoLista los que entraron como dependencia.
sudo apt-mark manual paqueteLo marca como manual: autoremove ya no lo ofrecerá.
sudo apt-mark auto paqueteLo marca como automático.
sudo apt-mark hold paqueteLo retiene: no se actualizará ni se quitará hasta que se lo libere.
sudo apt-mark unhold paqueteLo libera.
apt-mark showholdLista los retenidos.

La primera fila tiene un uso que se agradece el día que hay que reinstalar el sistema: apt-mark showmanual > mis-paquetes.txt guarda la lista de todo lo que elegiste, lista para instalar de nuevo en otra máquina. La retención, hold, sirve cuando una versión nueva de un paquete rompe algo y se quiere quedar en la actual mientras se resuelve; conviene no olvidarla puesta, porque un paquete retenido tampoco recibe correcciones de seguridad.

11. Los repositorios por dentro

¿De dónde saca apt la dirección de los servidores? De unos archivos de texto en /etc/apt, que cualquier usuario puede leer y que solo root puede modificar. Durante años fue un único archivo, /etc/apt/sources.list, con una línea por repositorio; desde Ubuntu 24.04, los repositorios oficiales están en /etc/apt/sources.list.d/ubuntu.sources, con un formato de campos:

terminal
$ cat /etc/apt/sources.list.d/ubuntu.sources
Types: deb
URIs: http://archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main universe restricted multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main universe restricted multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
CampoIndica
Typesdeb son paquetes listos para instalar; deb-src, su código fuente.
URIsLa dirección del servidor.
SuitesLas secciones de esa versión de la distribución.
ComponentsLos grupos de paquetes que se quieren usar.
Signed-ByLa clave con que deben venir firmados los índices. Si la firma no coincide, apt rechaza el repositorio.

El formato anterior, que sigue siendo válido y es el que se ve en Debian y en la mayoría de los tutoriales, dice lo mismo en una línea: deb http://archive.ubuntu.com/ubuntu noble main universe.

Las suites y los componentes explican los nombres que aparecían en la salida de apt update y de apt show:

SuiteContiene
nobleLos paquetes tal como estaban el día en que se publicó Ubuntu 24.04. No cambia nunca.
noble-securityLas correcciones de seguridad.
noble-updatesLas correcciones de fallos que no son de seguridad.
noble-backportsVersiones más nuevas de algunos programas, adaptadas a esta versión. No se instalan si no se piden.
ComponenteSoftwareLo mantiene
mainLibreCanonical, la empresa de Ubuntu, con soporte garantizado.
universeLibreLa comunidad. Es el más grande: allí están mc, htop y tree.
restrictedNo libreCanonical. Controladores de fabricantes, como los de algunas placas de video.
multiverseNo libreLa comunidad. Con restricciones de licencia.

apt policy reúne todo esto para un paquete: qué versión está instalada, cuál es la candidata a instalarse y de qué repositorio sale cada una.

terminal
$ apt policy mc
mc:
  Installed: 3:4.8.30-1ubuntu0.1
  Candidate: 3:4.8.30-1ubuntu0.1
  Version table:
 *** 3:4.8.30-1ubuntu0.1 500
        500 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages
        100 /var/lib/dpkg/status
     3:4.8.30-1ubuntu0 500
        500 http://archive.ubuntu.com/ubuntu noble/universe amd64 Packages

Los tres asteriscos señalan la versión instalada. Cuando Installed y Candidate difieren, hay una actualización pendiente; cuando Installed dice (none), el paquete no está.

Repositorios de terceros y PPA

A los repositorios de la distribución se les pueden sumar otros. Algunos fabricantes de software publican el suyo, con instrucciones para agregarlo, y así sus programas se actualizan con el mismo apt upgrade que el resto. En Ubuntu existen además los PPA, Personal Package Archives: repositorios pequeños, mantenidos por una persona o un equipo, que suelen ofrecer versiones más nuevas de un programa. Cada repositorio agregado es un archivo más en /etc/apt/sources.list.d.

terminal: agregar y quitar un PPA
$ sudo add-apt-repository ppa:usuario/nombre         # lo agrega, y ejecuta apt update
$ ls /etc/apt/sources.list.d/
ubuntu.sources  usuario-ubuntu-nombre-noble.sources
$ sudo add-apt-repository --remove ppa:usuario/nombre
Agregar un repositorio es confiarle el sistema

Los paquetes se instalan como root, y sus scripts de instalación se ejecutan como root. Quien administra un repositorio que agregaste puede, con cualquier actualización futura, poner en tu máquina el programa que quiera, incluso reemplazando paquetes del sistema. Los repositorios oficiales tienen detrás a la distribución; un PPA, a una persona. Antes de copiar de un tutorial una línea que agrega un repositorio conviene saber de quién es, y preferir siempre el paquete de la distribución si existe. Los repositorios que ya no se usan se quitan: uno abandonado termina dando errores en cada apt update.

12. Instalar un archivo .deb

Algunos programas no están en ningún repositorio, y sus autores ofrecen el archivo .deb para descargar desde su página. Es el caso de varios navegadores, editores y aplicaciones comerciales. Para practicar sin depender de un sitio externo, le pedimos a apt que descargue un paquete sin instalarlo:

terminal, en ~/practica
$ cd ~/practica
$ apt download ncdu
Get:1 http://archive.ubuntu.com/ubuntu noble/universe amd64 ncdu amd64 1.19-0.1 [45.1 kB]
Fetched 45.1 kB in 0s (201 kB/s)
$ ls -l *.deb
-rw-r--r-- 1 ana ana 45108 oct 12 23:02 ncdu_1.19-0.1_amd64.deb

Antes de instalar un .deb de origen externo se lo puede examinar, sin privilegios y sin modificar nada:

terminal
$ dpkg -I ncdu_1.19-0.1_amd64.deb | grep -E '^ (Package|Version|Depends|Installed-Size)'
 Package: ncdu
 Version: 1.19-0.1
 Installed-Size: 119
 Depends: libc6 (>= 2.38), libncursesw6 (>= 6), libtinfo6 (>= 6)
$ dpkg -c ncdu_1.19-0.1_amd64.deb | grep -v '/$'
-rwxr-xr-x root/root     96448 2024-03-31 07:15 ./usr/bin/ncdu
-rw-r--r-- root/root      1837 2024-03-31 07:15 ./usr/share/doc/ncdu/changelog.Debian.gz
-rw-r--r-- root/root      1296 2024-03-31 07:15 ./usr/share/doc/ncdu/copyright
-rw-r--r-- root/root      8544 2024-03-31 07:15 ./usr/share/man/man1/ncdu.1.gz

dpkg -I, con i mayúscula, muestra la ficha; dpkg -c lista el contenido, con el aspecto de un tar -tvf del tema 15, y el grep -v '/$' descarta las líneas de los directorios. Un programa, su manual y dos archivos de documentación: nada sospechoso. Lo instalamos:

terminal
$ sudo apt install ./ncdu_1.19-0.1_amd64.deb
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'ncdu' instead of './ncdu_1.19-0.1_amd64.deb'
The following NEW packages will be installed:
  ncdu
0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
…
Setting up ncdu (1.19-0.1) ...
$ dpkg -l ncdu | tail -n 1
ii  ncdu           1.19-0.1     amd64        ncurses disk usage viewer

El ./ delante del nombre es obligatorio. Es lo que le indica a apt que se trata de un archivo; sin él, buscaría en los repositorios un paquete con ese nombre tan largo, y respondería que no existe. También sirve una ruta absoluta.

sudo apt install ./archivo.debsudo dpkg -i archivo.deb
Instala el paqueteSíSí
Dependencias que faltanLas descarga de los repositorios y las instalaNo las instala: el paquete queda a medio configurar, con un error
Si fallaNo instala nadaSe completa después con sudo apt install -f

La forma con dpkg -i es la que figura en muchas instrucciones antiguas; hoy conviene la primera. Un paquete instalado desde un archivo queda registrado como cualquier otro, y se quita igual, con apt remove. Lo que no tiene es de dónde actualizarse: si no proviene de un repositorio configurado, las versiones nuevas hay que descargarlas e instalarlas a mano, salvo que el propio paquete agregue el repositorio de su fabricante, cosa que varios hacen.

Y vale aquí, con más razón, la advertencia de la sección anterior: un .deb descargado de una página no pasó por la verificación de ningún repositorio. Se instala solo si proviene del sitio oficial de quien hace el programa.

13. La caché y el historial

El gestor de paquetes usa cuatro lugares del sistema de archivos. Todos están en /var y en /etc, y conocerlos permite entender sus mensajes de error.

RutaContiene
/etc/apt/La configuración: los repositorios y sus claves.
/var/lib/apt/lists/Los índices descargados por apt update.
/var/cache/apt/archives/Los archivos .deb descargados, que se conservan después de instalar.
/var/lib/dpkg/La base de datos de lo instalado. No se toca a mano.
/var/log/apt/history.logEl registro de las operaciones de apt.
/var/log/dpkg.logEl registro de dpkg, paquete por paquete.

Liberar espacio

Los .deb descargados quedan guardados, por si hay que reinstalarlos sin conexión. Con el tiempo pueden sumar cientos de megabytes, y se los puede borrar sin consecuencias: si hicieran falta, se descargan de nuevo.

terminal
$ ls /var/cache/apt/archives/*.deb | wc -l
44
$ sudo apt clean
$ ls /var/cache/apt/archives/
lock  partial
ComandoBorra
sudo apt cleanTodos los .deb de la caché.
sudo apt autocleanSolo los que ya no se pueden descargar, por ser versiones reemplazadas.
sudo apt autoremoveLos paquetes instalados que nadie necesita. Es el que más espacio recupera, sobre todo por los kernels viejos.

Qué se instaló, y cuándo

En el tema 8, al recorrer /var/log, aparecieron un directorio apt y un archivo dpkg.log. Son la memoria del gestor de paquetes, y responden la pregunta que se hace cuando algo dejó de funcionar: «¿qué cambió ayer?».

terminal
$ tail -n 6 /var/log/apt/history.log

Start-Date: 2026-10-12  23:04:51
Commandline: apt install ./ncdu_1.19-0.1_amd64.deb
Requested-By: ana (1000)
Install: ncdu:amd64 (1.19-0.1)
End-Date: 2026-10-12  23:04:52
$ grep -A 3 'apt install mc' /var/log/apt/history.log | grep Install
Install: mc-data:amd64 (3:4.8.30-1ubuntu0.1, automatic), libssh2-1t64:amd64 (1.11.0-4.1build2, automatic), mc:amd64 (3:4.8.30-1ubuntu0.1)
$ grep ' install ' /var/log/dpkg.log | tail -n 2
2026-10-12 22:58:14 install mc:amd64 <none> 3:4.8.30-1ubuntu0.1
2026-10-12 23:04:51 install ncdu:amd64 <none> 1.19-0.1

Cada bloque de history.log es una operación: cuándo empezó, qué comando se escribió, quién lo pidió y qué paquetes se instalaron, se actualizaron o se quitaron, con la palabra automatic en los que entraron como dependencia. Cuando la línea Commandline dice /usr/bin/unattended-upgrade, fue el servicio de actualizaciones automáticas. Los registros anteriores están en archivos rotados y comprimidos, history.log.1.gz y siguientes, que se leen con zcat o zgrep, del tema 15.

14. Recetas y errores comunes

Quiero…Comando
Poner el sistema al díasudo apt update && sudo apt upgrade
Ver qué se actualizaría, sin hacerloapt list --upgradable
Buscar un paquete por su nombreapt search --names-only texto
Leer la ficha de un paquete antes de instalarloapt show paquete
Ver qué haría una instalación, sin hacerlaapt install -s paquete
Saber si un paquete está instaladodpkg -l paquete
Ver qué comandos trajo un paquetedpkg -L paquete | grep /bin/
Encontrar los archivos de configuración de un paquetedpkg -L paquete | grep '^/etc'
Saber de qué paquete es un comandodpkg -S "$(which comando)"
Saber qué paquete trae un archivo que no tengoapt-file search nombre
Quitar un programa y lo que vino con élsudo apt remove --autoremove paquete
Quitarlo con su configuraciónsudo apt purge paquete
Borrar la configuración de paquetes ya quitadosdpkg -l | grep '^rc', y sudo apt purge de cada uno
Reponer archivos borrados de un paquetesudo apt install --reinstall paquete
Guardar la lista de lo que instaléapt-mark showmanual > mis-paquetes.txt
Impedir que un paquete se actualicesudo apt-mark hold paquete
Liberar espacio en discosudo apt autoremove && sudo apt clean
Saber qué se instaló últimamentegrep -B 3 'Install:' /var/log/apt/history.log | tail -n 20
Saber si hay que reiniciarcat /var/run/reboot-required
SíntomaCausaSolución
Could not open lock file … Permission denied, are you root?Falta sudo.Repetir con sudo; sudo !!, del tema 5.
Unable to locate package nombreEl nombre está mal escrito, la lista está desactualizada, o el paquete no existe en los repositorios configurados.apt search; sudo apt update.
Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 3127 (unattended-upgr)Otro proceso está usando el gestor: las actualizaciones automáticas, o una tienda de aplicaciones abierta.Esperar unos minutos y repetir. No borrar el archivo de bloqueo.
dpkg was interrupted, you must manually run 'sudo dpkg --configure -a'Una instalación anterior se cortó: se cerró la terminal, o se apagó el equipo.El comando que el mensaje indica.
Unmet dependencies. Try 'apt --fix-broken install'Quedó un paquete instalado sin sus dependencias, típicamente por dpkg -i.sudo apt --fix-broken install, que es lo mismo que apt install -f.
404 Not Found al instalar.La lista local nombra una versión que el servidor ya reemplazó.sudo apt update, y repetir.
apt update termina con NO_PUBKEY o is not signed.Un repositorio agregado no tiene su clave, o la clave venció.Seguir las instrucciones actuales de quien lo publica, o quitar ese repositorio.
apt update da error en un repositorio que does not have a Release file.Un PPA o repositorio de terceros que no existe para esta versión de Ubuntu.Borrar su archivo de /etc/apt/sources.list.d.
Ejecuté apt update y sigo con las versiones viejas.update solo renueva la lista.sudo apt upgrade.
Después de upgrade quedan paquetes kept back.Actualizarlos exige quitar o agregar otros, o se distribuyen por tandas.Esperar unos días, o sudo apt full-upgrade, leyendo lo que propone.
Desinstalé un programa, lo reinstalé, y conserva la configuración vieja.remove no borra /etc, y nada borra tu directorio personal.apt purge, y borrar a mano su directorio en ~/.config.
apt install archivo.deb responde Unable to locate package.Falta la ruta: lo buscó en los repositorios.sudo apt install ./archivo.deb
Aparece N: Download is performed unsandboxed as root… al instalar un .deb local.El archivo está en tu directorio personal, donde el usuario interno de apt no puede leer.Es un aviso, no un error: la instalación se hizo.
WARNING: apt does not have a stable CLI interfaceSe envió la salida de apt a una tubería.Ignorarla, o agregar 2> /dev/null.
Durante una actualización, una pantalla pregunta qué hacer con un archivo de configuración modificado.El paquete trae una versión nueva de un archivo de /etc que cambiaste.La opción por defecto conserva el tuyo, y deja la nueva al lado con extensión .dpkg-dist para comparar con diff.
apt install firefox instala algo llamado «snap».En Ubuntu, algunos programas se distribuyen en otro formato, y el paquete .deb solo hace de puente.Es lo esperado. Tema 36.
Nunca se interrumpe una instalación en marcha

Cerrar la terminal o pulsar Ctrl+C mientras dpkg desempaqueta y configura deja paquetes a medio instalar y la base de datos inconsistente. Casi siempre se repara con sudo dpkg --configure -a, pero es un riesgo gratuito. Y vale la inversa: ante un mensaje de bloqueo, no se borran los archivos lock ni se mata el proceso que los tiene, por más que haya páginas que lo aconsejen. Se averigua qué proceso es, con el ps del tema 32, y se espera a que termine.

La referencia del tema:

Se escribeQué hace
sudo apt updateRenueva la lista de paquetes disponibles.
sudo apt upgradeInstala las versiones nuevas de lo instalado, sin quitar nada.
sudo apt full-upgradeLo mismo, quitando paquetes si hace falta.
apt search textoBusca en nombres y descripciones.
apt show paqueteMuestra la ficha de un paquete.
apt list --installed, --upgradableLista los instalados; los actualizables.
apt policy paqueteVersión instalada, versión candidata y su origen.
apt depends, apt rdependsQué necesita un paquete; quién lo necesita.
sudo apt install paqueteInstala un paquete y sus dependencias.
sudo apt install ./archivo.debInstala un paquete desde un archivo.
sudo apt remove paqueteLo quita, conservando su configuración.
sudo apt purge paqueteLo quita, con su configuración.
sudo apt autoremoveQuita las dependencias que quedaron sin uso.
sudo apt cleanVacía la caché de archivos descargados.
apt-mark showmanual, hold, unholdLista lo pedido expresamente; retiene y libera un paquete.
dpkg -l, -L, -S, -sLista paquetes; archivos de un paquete; paquete de un archivo; estado.
dpkg -I, dpkg -cFicha y contenido de un archivo .deb.

En el sistema quedan instalados mc y ncdu; al segundo, que muestra qué ocupa el espacio de un disco, lo usaremos en el tema 38. Todo lo visto vale para la familia de Debian. Las demás distribuciones resuelven el mismo problema con otros programas, y hay además formatos de paquete que funcionan en todas. En el tema 36 vemos dnf, pacman, snap y flatpak, apoyados en las ideas de este.

15. Resumen

16. Preguntas de repaso

Intenta responder cada una antes de abrir la respuesta.

1. ¿Qué contiene un paquete, además de los archivos del programa?

Sus metadatos —nombre, versión, arquitectura, descripción—, la lista de paquetes de los que depende, la indicación de cuáles de sus archivos son de configuración, y los scripts que se ejecutan al instalarlo y al quitarlo.

2. ¿Qué ventajas tiene instalar desde un repositorio frente a descargar un instalador de una página?

El origen es único y está firmado, las dependencias se resuelven solas, todo el software se actualiza con un mismo comando y la desinstalación es completa, porque el sistema sabe qué archivos puso cada paquete.

3. ¿Qué diferencia hay entre dpkg y apt?

dpkg instala, quita y consulta paquetes que ya están en el disco, sin conocer los repositorios ni resolver dependencias. apt descarga de los repositorios, resuelve las dependencias y le encarga a dpkg la instalación.

4. Después de sudo apt update, ¿qué programas quedaron actualizados?

Ninguno. apt update solo renueva la lista de paquetes disponibles. Las versiones nuevas se instalan con sudo apt upgrade.

5. ¿Por qué conviene ejecutar apt update antes de apt install?

Porque apt trabaja con una copia local del índice. Si está desactualizada, puede instalar una versión vieja o pedir al servidor un archivo que ya no existe, y fallar con un error 404.

6. En la ficha de un paquete, ¿qué diferencia hay entre Depends, Recommends y Suggests?

Depends son los paquetes imprescindibles, que se instalan siempre. Recommends, los que casi todos quieren junto con él, y apt los instala por defecto. Suggests, los que amplían sus funciones, y no se instalan.

7. Pediste instalar un paquete y apt anuncia 3 newly installed. ¿Por qué?

Porque el paquete depende de otros dos que no estaban en el sistema, y apt los instala junto con él. Figuran en la línea The following additional packages will be installed.

8. ¿Con qué comando averiguas qué archivos instaló el paquete tree? ¿Y a qué paquete pertenece /usr/bin/sort?

dpkg -L tree, y dpkg -S /usr/bin/sort.

9. ¿Qué significa el estado rc en una línea de dpkg -l?

Que el paquete se quitó pero quedaron sus archivos de configuración. Se eliminan con sudo apt purge paquete.

10. ¿Qué diferencia hay entre apt upgrade y apt full-upgrade?

apt upgrade nunca quita un paquete: si una actualización lo exige, la deja pendiente. apt full-upgrade quita los paquetes que haga falta para completar la actualización.

11. ¿Qué diferencia hay entre apt remove y apt purge? ¿Qué no borra ninguno de los dos?

remove quita el programa y conserva su configuración en /etc; purge quita también esa configuración. Ninguno borra lo que el programa escribió en el directorio personal del usuario.

12. ¿Qué paquetes quita apt autoremove?

Los que se instalaron automáticamente, como dependencia de otro, y de los que ya no depende ningún paquete instalado.

13. ¿Por qué apt install programa.deb responde que no encuentra el paquete, y cómo se corrige?

Porque sin una ruta apt toma el argumento como el nombre de un paquete de los repositorios. Se corrige con sudo apt install ./programa.deb.

14. ¿Por qué agregar un repositorio de terceros es una decisión de seguridad?

Porque los paquetes y sus scripts se instalan como root: quien administra el repositorio puede poner en el sistema cualquier programa, en esta instalación o en cualquier actualización futura.

15. apt responde que no puede obtener el bloqueo, porque lo tiene otro proceso. ¿Qué haces?

Esperar unos minutos y repetir el comando: lo más probable es que estén corriendo las actualizaciones automáticas. No hay que borrar el archivo de bloqueo ni matar el proceso.

16. Algo dejó de funcionar esta mañana. ¿Dónde miras qué paquetes se instalaron o actualizaron ayer?

En /var/log/apt/history.log, que registra cada operación con su fecha, el comando y los paquetes afectados; y con más detalle en /var/log/dpkg.log.

Para practicar

  1. Ejecuta sudo apt update e identifica en la salida las líneas Hit y Get, las suites y la cantidad de paquetes actualizables. Vuelve a ejecutarlo enseguida: ¿qué cambia?
  2. Cuenta cuántos paquetes tienes instalados, de dos maneras: con apt list --installed y con dpkg -l. Cuenta después cuántos elegiste tú, con apt-mark showmanual.
  3. Busca con apt search un programa para ver el uso del disco y otro para comparar archivos. Lee con apt show la ficha de uno de los resultados: ¿de qué componente es, cuánto ocupa y de qué depende?
  4. Simula con apt install -s la instalación de mc, y luego instálalo de verdad, leyendo cada línea antes de aceptar. Anota cuántos paquetes se agregaron y cuánto espacio ocuparon.
  5. Con dpkg -L, averigua qué comandos trajo mc, dónde está su página de manual y cuántos archivos son en total. Con dpkg -L mc-data, cuáles puso en /etc.
  6. Usa dpkg -S para averiguar a qué paquete pertenecen grep, ps, nano y man. Prueba con un archivo de tu directorio personal y explica la respuesta.
  7. Consulta apt depends y apt rdepends --installed para libc6. ¿Qué te dice la longitud de la segunda lista sobre lo que pasaría al quitarlo? No lo intentes.
  8. Quita mc con apt remove. Comprueba que sus dependencias siguen instaladas, quítalas con autoremove, busca los paquetes en estado rc y elimínalos con purge. Vuelve a instalar mc al final.
  9. Muestra el contenido de /etc/apt/sources.list.d/ y de los archivos que haya. Identifica el servidor, las suites y los componentes. Compara con lo que informa apt policy bash.
  10. Descarga un paquete pequeño con apt download, examínalo con dpkg -I y dpkg -c, instálalo con sudo apt install ./… y localiza la operación en /var/log/apt/history.log. Termina con sudo apt autoremove y sudo apt clean, y comprueba que la caché quedó vacía.