Saltar la navegación

aptitude

El comando aptitude es un front-end para APT, y se puede usar desde la línea de comandos o a través de un modo gráfico. Fue desarrollado fuera del proyecto APT de Debian por Daniel Burrows.

Este front-end destaca en relación a otros por varios motivos:

  • De forma automática elimina los paquetes que dejan de utilizarse por ser dependencias de otros que han sido desinstalados.
  • Posee mejores algoritmos para analizar las dependencias de los paquetes y proponer soluciones en caso de conflictos.
  • Potente opción de búsqueda de paquetes.
  • Posee muchas opciones en la línea de comando.

La sintaxis general de uso es la siguiente:

aptitude [ opción... ] acción [ argumento... ]

La primera palabra que no comience por un guión se tomará como la acción que aptitude ha de llevar a cabo. Si solo se especifica el comando sin ningún valor más, se iniciará el modo gráfico, del cual podremos salirnos pulsando la tecla q (quit). Solo se va a explicar el modo línea de comando.

A la hora de referirnos a los paquetes, aptitude permite utilizar lo que se denominan patrones de búsqueda, con los cuales se especifican todas las condiciones o términos que tienen que cumplir los paquetes para que sean seleccionados. Vamos a ver a continuación, sin entrar en todos los detalles, cómo construir estos patrones.

Un patrón de búsqueda está formado por uno o más términos (condiciones); un paquete para ser seleccionado debe cumplir todos los términos; los términos se pueden escribir en su forma larga y algunos, los más habituales, poseen una forma abreviada. La forma larga consiste en una interrogación, el nombre del término y opcionalmente puede llevar algún parámetro entre paréntesis:

?termino[(parámetro)]

Ejemplos: ?name(tree), ?installed, ?description(editor), etc.

Los términos más usados en los patrones de búsqueda tienen una forma abreviada de escribirse, esta empieza por el signo ~, le sigue un carácter que representa al término y le sigue el texto del parámetro si lo lleva. Los ejemplos anteriores de forma abreviada se escriben así:

Ejemplos: ~nfree, ~i, ~deditor, etc.

El texto de los parámetros de la mayoría de los términos se interpreta como un expresión regular no sensible a las mayúsculas. Una expresión regular coincide con un campo si cualquier porción del campo de texto coincide con la expresión. Por ejemplo, ?name(tree) coincidirá con los paquetes cuyos nombres contienen el texto tree, y no con el paquete que se llame tree. Para anular los caracteres especiales (+, [, ], -, |, etc.) de las expresiones regulares se usa el signo \, por ejemplo, ?description(g\+\+) ó ?description("g\+\+").

Como los patrones de búsqueda poseen caracteres con significado especial, por ejemplo, (, ), ?, |, !, etc., es posible anular este significado escribiendo el texto del parámetro entre dobles comillas, por ejemplo: ?description("symbols)"), o bien, sin comillas pero precediéndolos del carácter ~, que para el caso anterior quedaría: ?description(symbols~)).

A la hora de escribir un patrón de búsqueda con más de un término, lo más aconsejable es separar estos con un espacio, aunque pueden escribirse juntos y entonces habría que tener en cuenta una serie de situaciones en las que no vamos a entrar. No debemos olvidar que  todos los términos se deben cumplir para que el paquete sea seleccionado. Ejemplo:

~i ~nfree

A continuación vamos a ver los términos más usuales. Así, lo más normal es seleccionar paquetes por su nombre y para ello está el término ?name(expresión-regular-del-nombre).

Los paquetes que comienzan por la palabra free pueden seleccionarse con el término: ?name("^free"). En este caso, se ha usado el carácter ^ de las expresiones regulares que indica  comienzo de línea, y le sigue la palabra free. En este caso, el carácter ^ no tiene conflicto con los caracteres especiales de los patrones de búsqueda y podrían quitarse las dobles comillas, quedando así: ?name(^free). También, este término se puede expresar abreviadamente con ~n, y podría quedar así: ~n"^free" ó ~n^free.

Un término muy parecido a ?name es ?exact-name(nombre-exacto), que se utiliza para seleccionar paquetes que tengan el nombre que se especifique. Con un nombre concreto se pueden seleccionar varios paquetes pues hay muchos paquetes que se encuentran disponibles para varias arquitecturas.

En el contexto de los patrones de búsqueda, si se escribe un texto sin ningún término, nos estaríamos refiriendo al término ?exact-name. Por ejemplo, si queremos seleccionar un paquete de nombre tree, podemos hacerlo de estas dos formas: ?exact-name(tree) o tree.

Para seleccionar paquetes en base a un contenido de su descripción usaremos ?description(expresión-regular-de-la-descripción) ó ~d. Por ejemplo, los paquetes con un nombre que comienza por free y contienen en su descripción la palabra framework, se podrían seleccionar así:

~n^free ~dframework

Otros términos que podemos incluir en los patrones de búsqueda son:

Formato largo Formato abreviado Descripción
?architecture(nombre-arquitectura)  ~rnombre-arquitectura
Selecciona los paquetes en base a una arquitectura. Hay que especificar el nombre exacto de la arquitectura: amd64, i386, etc.
?installed ~i Selecciona los paquetes que estén instalados.
?tag(etiqueta) ~Getiqueta Selecciona los paquetes que posean la etiqueta dada. El argumento etiqueta es una expresión regular. Actualmente se están clasificando con etiquetas los paquetes de la distribución Debian.
?config-files ~c Selecciona los paquetes que estén desinstalados pero no purgados, es decir, aún se conservan los ficheros de configuración.
?section(sección) -ssección Selecciona los paquetes de la sección especificada. El argumento sección es una expresión regular.

Por ejemplo, todos los paquetes instalados de la arquitectura amd64: ~i ~ri386.

Pero no solo se puede aplicar la condición lógica Y, separando para ello los términos con espacios, también se pueden aplicar la condiciones lógicas NOT y OR, además de poder usar paréntesis para alterar las prioridades.

Formato largo Formato abreviado Descripción
?not(patrón-de-búsqueda)       !patrón    
Selecciona los paquetes que no cumplen con el patrón de búsqueda-
?and(patrón1, patrón2, ...)
patrón1 patrón2 ... Selecciona los paquetes que cumplen con todos los patrones (patrón1, patrón2, etc.).
?or(patrón1, patrón2, ...) patrón1 | patrón2 Selecciona los paquetes que cumplan con al menos uno de los patrones (patrón1, patrón2, etc.).
(patrón) Los paréntesis se utilizan para cambiar las prioridades.

Por ejemplo, para seleccionar los paquetes que no estén instalados y sean de las arquitecturas amd64 o i386, podemos escribir cualquiera de los siguientes patrones de búsqueda:

  • !~i ( ~ramd64 | ~ri386 )
  • !~i ?or(~ramd64, ~ri386)
  • ?and(?not(?installed), ?or(~ramd64, ~ri386))
  • etc.

Si hubiésemos escrito: !~i -ramd64 | ~ri386, estaríamos seleccionando los paquetes instalados de la arquitectura amd64, junto con los paquetes de la arquitectura i386, estos últimos, estén instalados o no.

Las posibilidades de los patrones de búsqueda son mucho mayores. Hay más información aquí.

Actualización de las bases de datos de paquetes

Para cualquier cosa que queramos hacer con APT necesitamos tener la base de datos local de paquetes actualizada, es decir, es necesario descargarse los ficheros Packages.gz y Sources.gz de los repositorios que tengamos configurado en /etc/apt/sources.list. Por lo tanto, es necesario ejecutar antes que nada la acción update de aptitude.

# aptitude update

Actualización del software del sistema

Para actualizar todo el software del sistema a la última versión disponible, y también instalar las actualizaciones de seguridad (debemos tener el repositorio de seguridad configurado), se usa la acción safe-upgrade, cuya sintaxis es la siguiente:

aptitude safe-upgrade [ paquete... ]

Si no se especifica ningún paquete, se actualizarán todos los paquetes instalados en el sistema para los que haya una nueva versión. Esta acción instalará nuevos paquetes si es necesario para cumplir con las dependencias de los paquetes que se actualizarán, pero no eliminará ningún paquete, aunque lo pida la actualización. Por lo tanto, si la actualización de un paquete implica borrar otro paquete, esta acción no llevará a cabo la actualización del paquete afectado, pero sí actualizará los demás.

Por compatibilidad con apt y apt-get, se acepta la acción upgrade como sinónimo a safe-upgrade.

# aptitude safe-upgrade
# aptitude upgrade

Es posible también, como se ve en la sintaxis general, acompañar esta acción con una serie de paquetes, lo que hará que la actualización solo afecte a los paquetes que se especifiquen.

Para seleccionar paquetes concretos que se verán afectatos por safe-upgrade podemos usar patrones de búsqueda, y si solo ponemos texto, en realidad estaremos usando el término por defecto que es ?exact-name, es decir, que el texto que escribamos debe ser el nombre exacto de los paquetes.

En un contexto de multiarquitectura, si queremos actualizar solo los paquetes de la arquitectura amd64 que sean juegos, ejecutaríamos:

# aptitude safe-upgrade '?architecture("amd64") ?tag("games")'

o de forma más breve:

# aptitude safe-upgrade '~ramd64 ~Ggames'

Observa que el patrón de búsqueda se ha encerrado entre apóstrofes con el objetivo de evitar que, en este caso, la interrogación, los paréntesis y el signo ~, los interprete el shell, pues tienen un significado especial para él. De esta forma quien interpreta esos caracteres es el comando aptitude.

Otra acción que podemos usar, también para actualizar el sistema, es full-upgrade:

aptitude full-upgrade [ paquete... ]

Esta acción es menos conservadora que safe-upgrade, pues es capaz de borrar paquetes si lo pide la actualización.

# aptitude full-upgrade

Por compatibilidad con apt-get, el comando aptitude entiende dist-upgrade como sinónimo de full-upgrade.

# aptitude dist-upgrade

Instalación de paquetes

Para instalar paquetes de los repositorios hay que usar la acción install:

aptitude install paquete [ paquete... ]

Los argumentos pueden ser nombres de paquetes exactos (texto normal) o patrones de búsqueda; y se instalaran los paquetes especificados junto con sus dependencias.

# aptitude install tree

Si durante la instalación de un paquete se produce algún error y esta no llega a completarse, repetiremos la instalación, y si en este segundo paso se nos indica que el paquete ya está instalado, usaremos la acción reinstall:

aptitude reinstall paquete [ paquete... ]

# aptitude reinstall tree

Desinstalación de paquetes

Para desinstalar paquetes tenemos dos acciones:

  • remove: desinstala todos los ficheros del paquete menos los ficheros de configuración, lo cual permite, si volvemos a instalar el mismo paquete en otro momento, recuperar la última configuración que teníamos, ya que durante la instalación los ficheros de configuración solo se copian en el disco si previamente no existen.
  • purge: desinstala todos los ficheros del paquete incluido los ficheros de configuración.

La sintaxis es la mimas que con install:

aptitude remove paquete [ paquete... ]

aptitude purge paquete [ paquete... ]

Las dependencias también se desinstalarán a menos que haya instalado otro paquete que las utilice.

Borrado de los ficheros .deb

Los ficheros .deb que se descargan cuando se instalan paquetes se almacenan en /var/cache/apt/archives y no se borran, ya que pueden utilizarse y evitar su descarga en una reinstalación. Si queremos eliminarlos para liberar espacio en el disco, usaremos una de las siguientes acciones:

  • clean: elimina todos los ficheros .deb del directorio caché anterior.
  • autoclean: elimina todos los paquetes del directorio caché que ya no se pueden descargar, es decir, aquellos paquetes que han desaparecido en la nueva versión que tenemos instalada.

La sintaxis es:

aptitude clean

aptitude autoclean

Mostrar la información de control de un paquete

La información de control de un paquete se puede mostrar con la acción show. La sintaxis es:

aptitude show paquete [ paquete... ]

donde los paquetes pueden expresarse utilizando el nombre exacto (solo texto) o patrones de búsqueda.

$ aptitude show tree
Paquete: tree                                    
Estado: instalado
Instalado automáticamente: no
Versión: 1.7.0-3
Prioridad: opcional
Sección: utils
Desarrollador: Florian Ernst <florian@debian.org>
Arquitectura: amd64
Tamaño sin comprimir: 102 k
Depende de: libc6 (>= 2.14)
Descripción: displays an indented directory tree, in color
 Tree is a recursive directory listing command that produces a depth indented listing of files, which is colorized ala dircolors if the LS_COLORS environment variable
 is set and output is to tty.
Página principal: http://mama.indstate.edu/users/ice/tree/

Marcas: implemented-in::c, interface::commandline, role::program, scope::utility, use::browsing, works-with::file

Mostrar la información de control de un paquete

Para mostrar la versión de un grupo de paquetes, es mejor la acción versions en vez de show. La sintaxis es:

aptitude versions paquete [ paquete... ]

pero con esta acción al texto que no va dentro de un término, se le aplica el término ?name.

El siguiente ejemplo muestra las versiones de todos los paquetes de nombre tree disponibles para el sistema.

# aptitude versions '?exact-name(tree)'
Package tree:                              
iB  1.7.0-3                    oldstable              500

Package tree:i386:
pB  1.7.0-3                    oldstable             500

En el ejemplo, al estar configurado el sistema en multiarquitectura, la amd64 como nativa y la i386 como añadida, se muestran dos paquetes tree con sus versiones. El primer carácter de la línea indica el estado del paquete, los caracteres más habituales son: i (instalado), p (no está instalado), c (no está instalado, pero están sus ficheros de configuración). El último número (500) indica la prioridad del paquete, que se utiliza para determinar qué paquete se instalará cuando hay varios candidatos posibles.

Si la información anterior no la queremos agrupada, sino en una lista, debemos usar la opción --group-by=none:

# aptitude --group-by=none versions '~n("^tree$")'
iB  tree 1.7.0-3                 oldstable                 500
pB  tree:i386 1.7.0-3        oldstable                 500

Observa que en el ejemplo anterior se ha utilizado el término ?name con una expresión regular que hace que equivalga al término ?exact-name.

Descargar un paquete .deb

Si queremos descargarnos en el directorio de trabajo el fichero .deb de un paquete es necesario usar la acción download. La sintaxis es similar a la acción show:

aptitude download paquete [ paquete... ]

# aptitude download tree
Des: 1 http://ftp.us.debian.org/debian/ jessie/main tree amd64 1.7.0-3 [45,9 kB]
Descargados 45,9 kB en 0s (74,4 kB/s)
# ls
tree_1.7.0-3_amd64.deb

Buscar paquetes

La acción search permite mostrar un listado de paquetes que cumplan con el patrón de búsqueda. La sintaxis es la siguiente:

aptitude search paquete [ paquete... ]

y funciona como con la acción versions, por lo que el término por defecto del patrón de búsqueda aquí es ?name y no ?exact-name.

# aptitude search network-manager
iBA network-manager                                                             - network management framework (daemon and userspace tools)                             
p   network-manager-dbg                                                         - network management framework (debugging symbols)                                      
p   network-manager-dev                                                         - network management framework (development files)                                      
iBA network-manager-gnome                                                       - network management framework (GNOME frontend)                                         
p   network-manager-iodine                                                      - network management framework (iodine plugin core)                                     
p   network-manager-iodine-gnome                                                - network management framework (iodine plugin GNOME GUI)                                
p   network-manager-openconnect                                                 - network management framework (OpenConnect plugin)                                     
p   network-manager-openconnect-gnome                                           - network management framework (OpenConnect plugin GNOME GUI)                           
p   network-manager-openvpn                                                     - network management framework (OpenVPN plugin core)                                    
p   network-manager-openvpn-gnome                                               - network management framework (OpenVPN plugin GNOME GUI)                               
p   network-manager-pptp                                                        - network management framework (PPTP plugin core)                                       
p   network-manager-pptp-gnome                                                  - network management framework (PPTP plugin GNOME GUI)                                  
p   network-manager-strongswan                                                  - network management framework (strongSwan plugin)                                      
p   network-manager-vpnc                                                        - network management framework (VPNC plugin core)                                       
p   network-manager-vpnc-gnome                                                  - network management framework (VPNC plugin GNOME GUI)

El significado de la primera letra de cada fila es el mismo que en la acción versions, por lo que vemos que solo los paquetes network-manager y network-manager-gnome son los que están instalados.

Licencia: licencia de software libre GPL