Acabo de descubrir la mejor manera de purgar los paquetes eliminados.
Me diréis ¿pero ahora te enteras? Sí, ahora me entero. Yo hasta ahora usaba el método de toda la vida: buscar los paquetes eliminados pero no purgados y pasar el nombre del paquete a una herramienta para que los purgue. Hay mil y un variantes de este método, que cambian únicamente en la manera de obtener los paquetes, extraer el nombre, o la herramienta usada para purgar. Por ejemplo, tenemos el clásico:
for i in `dpkg -l | grep ^rc | cut -d" " -f 3`; do dpkg -P $i; done
Donde se usa el típico dpkg -l | grep ^rc
para listar los paquetes
eliminados pendientes de purgar, el comando cut
para extraer el nombre
del paquete, y dpkg
para purgar, todo ello controlado por un bucle for
del shell. De esta base se pueden hacer cambios para usar awk
en vez de
cut
, o usar apt-get purge
o aptitude purge
en vez de dpkg -P
, o
emplear pipes junto a xargs
para el control. Ejemplo:
dpkg -l | grep ^rc | awk '{ print $2; }' | xargs aptitude purge -y
Hay variantes que son scripts, con control de errores, etc, pero la base es la misma.
Hasta hoy, que me he encontrado esto:
aptitude purge ~c
¡Ohhhhhhhhhhhhhhhhh!
Si queréis saber cómo funciona, ~c
es un condición de búsqueda,
conocida como "término", que filtra los paquetes que han
sido eliminados pero no purgados. Por ejemplo, esta orden:
dpkg -l | grep ^rc
es equivalente a esta otra orden:
aptitude search ~c
sólo que en el primer caso es una búsqueda textual de líneas que
empiezan por "rc". Si el formato de dpkg -l
cambiara por alguna razón,
esta orden dejaría de funcionar como se espera, mientras que la segunda
orden está realmente diciéndole a aptitude
que busque paquetes con
cierto estado concreto.
Hay muchos más términos de búsqueda útiles, consultad la referencia de
términos de búsqueda para un listado completo. Aquí
sólo comentaré uno muy útil: ~i
para los paquetes instalados. Así por
ejemplo:
aptitude search ~i
es equivalente al típico dpkg -l | grep ^ii
(pero sin usar grep
). Y
para contar paquetes instalados vale con un:
aptitude search ~i | wc -l
Es incluso más útil para buscar entre los paquetes instalados sin tener
que recurrir a dpkg -l
y grep
:
$ aptitude search "~i linux-image"
i linux-image-3.11.4-amd64 - Linux kernel binary image for version 3.11.4-amd64
i linux-image-3.11.5-amd64 - Linux kernel binary image for version 3.11.5-amd64
i A linux-image-3.2.0-3-amd64 - Linux 3.2 for 64-bit PCs
en este caso las comillas son necesarias, si no no funcionará como se
espera. Observesé una pequeña ventaja frente al listado mediante dpkg
,
y es que en este caso se indican los paquetes que se han instalado
automáticamente por dependencias (la A
).
Si eliminamos el término ~i
hacemos la misma búsqueda pero sobre todos
los repositorios que tengamos configurados, estén los paquetes
instalados o no (es el equivalente al apt-cache search
):
$ aptitude search linux-image
v linux-image -
p linux-image-3.10-3-amd64 - Linux 3.10 for 64-bit PCs
p linux-image-3.10-3-amd64-dbg - Debugging symbols for Linux 3.10-3-amd64
p linux-image-3.10-3-rt-amd64 - Linux 3.10 for 64-bit PCs, PREEMPT_RT
p linux-image-3.10-3-rt-amd64-dbg - Debugging symbols for Linux 3.10-3-rt-amd64
v linux-image-3.11 -
p linux-image-3.11-trunk-amd64 - Linux 3.11 for 64-bit PCs
p linux-image-3.11-trunk-amd64-dbg - Debugging symbols for Linux 3.11-trunk-amd64
i linux-image-3.11.4-amd64 - Linux kernel binary image for version 3.11.4-amd64
i linux-image-3.11.5-amd64 - Linux kernel binary image for version 3.11.5-amd64
i A linux-image-3.2.0-3-amd64 - Linux 3.2 for 64-bit PCs
p linux-image-amd64 - Linux for 64-bit PCs (meta-package)
p linux-image-rt-amd64 - Linux for 64-bit PCs (meta-package), PREEMPT_RT
Con este nuevo descubrimiento, mi rutina de actualización diaria de paquetes va a quedar así:
aptitude update && aptitude upgrade
aptitude search ~c
aptitude purge ~c # (si es necesario)
aptitude autoclean
Y encima no necesito hacer autoremove
como necesitaría hacer en caso
de usar apt-get
.
Además, aptitude
tiene más ventajas, como los comandos why
y
why-not
, el interfaz de menú (que te permite saber qué paquetes
obsoletos tienes instalados), y sobre todo una forma más inteligente de
resolver conflictos de dependencias. Por todo esto y más es "la
herramienta preferida para el trabajo diario con paquetes desde línea de
comandos", según la propia FAQ de Debian.
Y además, contrariamente a lo que él mismo dice, aptitude
sí tiene
poderes de super vaca. O algo por el estilo...
:wq