El sistema de paquetes de Debian es uno de los gestores de instalación y desinstalación de software más avanzados en el mundo de las distribuciones GNU/Linux. No podría ser de otra manera, ya que Debian también es una de las distribuciones que más paquetes posee en sus repositorios (mas de 32.000 para la versión 7.0).

Si tienes Debian, Canaima o Ubuntu, ¿Alguna vez haz tenido la oportunidad de listar todos los paquetes que tienes instalados? Normalmente daría dolor de cabeza tratar de buscar un paquete en una lista de entre 1000 y 2000 nombres (la cantidad promedio de paquetes instalados en un sistema operativo de escritorio). Es por ello que existen diversos filtros de búsqueda para manejadores de la base de datos de paquetes como aptitude (aunque, estos filtros son implementados de forma nativa por aplicaciones gráficas como Synaptic y Software Center).

Normalmente buscamos en la base de datos con aptitude search [paquete], sin embargo, existen formas de ser más específicos con los términos de búsqueda. Por ejemplo, supongamos que queremos buscar todos los paquetes que comiencen con la palabra google. En ese caso, haríamos aptitude search google y tendríamos un resultado así:

Como observamos, existen algunos resultados que no necesariamente coinciden con lo que queríamos buscar, puesto que también existen paquetes que contienen la palabra google en el medio de la palabra, por ejemplo. Veamos que sucede su utilizamos el patrón de búsqueda por nombre de paquete ~n y agregamos la expresión regular ^ al principio de google, indicando que queremos listar todos los paquetes que comiencen por google, de la siguiente forma: aptitude search ~n^google.

Como vemos, el resultado es más corto y preciso que el anterior.

Existen muchos patrones de búsqueda que son útiles en nuestra búsqueda de paquetes; por ejemplo, búsqueda por descripción, por versión, por mantenedor, por repositorio, entre otros. Más abajo tenemos una tabla con todos los patrones disponibles:

Forma corta Descripción
~F Selecciona ningún paquete.
~T Selecciona todos los paquetes.
[PATRÓN1] [PATRÓN2] Seleccionar cualquier paquete que coincida con el [PATRÓN1] y el [PATRÓN2].
[PATRÓN1] | [PATRÓN2] Selecciona paquetes que coincidan con el [PATRÓN1], el [PATRÓN2] o ambos.
![PATRÓN] Seleccionar cualquier paquete que no coincida con el [PATRÓN].
~n[PATRÓN] Selecciona paquetes cuyo nombre coincida con [PATRÓN].
~m[PATRÓN] Selecciona paquetes cuyo mantenedor coincida con [PATRÓN].
~d[PATRÓN] Selecciona paquetes que contengan [PATRÓN] en su descripción.
~V[PATRÓN] Selecciona paquetes cuya versión coincida con [PATRÓN].
~E Selecciona paquetes esenciales (aquellos que contienen Essential: yes en sus archivos debian/control).
~O[PATRÓN] Selecciona paquetes desde el origen que coincida con [PATRÓN].
~P[PATRÓN] Selecciona paquetes que proveean otro paquete que coincida con [PATRÓN].
~p[PATRÓN] Selecciona paquetes que tengan una prioridad que coincida con [PATRÓN].
~s[PATRÓN] Selecciona paquetes que pertenezcan a una sección que coincida con [PATRÓN].
~G[PATRÓN] Selecciona paquetes que contengan un DebTag que coincida con [PATRÓN].
~t[PATRÓN] Selecciona paquetes que estén en una tarea que coincida con [PATRÓN].
~M Seleccionar paquetes que estén marcados como instalados automáticamente.
~a[PATRÓN] Seleccionar los paquetes que se encuentren marcados para una acción de aptitude (p. ej.: “install”, “upgrade”) que coincida con [PATRÓN].
~A[PATRÓN] Seleccionar paquetes desde un rama de un repositorio en específico que se encuentre en el archivo /etc/apt/sources.list (p. ej.: sid) y que coincida con [PATRÓN].
~b Seleccionar paquetes que tengan al menos una dependencia rota.
~C[PATRÓN] Seleccionar paquetes que entran en conflicto con los paquetes que coincidan con [PATRÓN].
~c Seleccionar los paquetes que fueron removidos pero no purgados y aún tienen archivos de configuración en el sistema.
~g Selecciona paquetes que no son requeridos por algún paquete instalado manualmente..
~D[TIPO]:[PATRÓN] Seleccionar paquetes que contengan un [TIPO] de dependencia sobre paquetes que coincidan con [PATRÓN].
~i Selecciona paquetes que se encuentren instalados.
~N Selecciona paquetes nuevos que hayan sido incorporados al repositorio desde la última vez que se hizo aptitude update.
~o Selecciona paquetes obsoletos, es decir, que después del último aptitude update hayan sido removidos del repositorio (probablemente reemplazados por otros paquetes).
~U Selecciona paquetes instalados que puedan ser actualizados luego de un aptitude update.
~v Selecciona paquetes virtuales.

Ejemplos prácticos

Todos mis paquetes (en Canaima):

aptitude search ~mFaneyth

Todos los paquetes de Erick Birbe, Sasha Solano, Carlos Espinoza y Francisco Vásquez que estén instalados (en Canaima):

aptitude search ~i~merickcion ~i~mssolano ~i~marmikhael ~i~mfranjvasquezg

Todos los paquetes que dependen de Blender:

aptitude search ~DDepends:Blender

Todos los paquetes que provean al paquete virtual “mail” y que estén instalados

aptitude search ~i~DProvides:mail

o lo que es lo mismo:

aptitude search ~i~Pmail

Todos los paquetes que estorban de tu sistema:

aptitude search ~c ~g

Todos los paquetes que tengan “RC” (Release Candidate) en su número de versión y que estén instalados

aptitude search ~i~VRC

¿Cuántos paquetes tengo instalados?

aptitude search ~i | wc -l

Todos los paquetes de desarrollo para python que estén instalados:

aptitude search ~i~n^python.*dev$

Y así, espero que puedas encontrar lo que estás buscando.

¡Hasta una próxima!