Un comando no funciona y surge la pregunta: ¿Tengo instalado ese paquete?
En una publicación anterior ya descubrimos cómo listar paquetes instalados lo cual es útil, pero si tienes montones de paquetes y necesitas sólo información de uno es bastante práctico saber si está instalado y dónde está, con la ayuda de un simple comando en la consola.
Antes que nada, cabe aclarar que hay un gran número de formas en que esto puede lograrse, se enlistarán sólo siete, pero existen muchas más formas dependiendo de la distribución de Linux que se utilice.
apt
Ubuntu cuenta con un poderoso gestor de paquetes, el apt (Advanced Packaging Tool) que nos permite instalar y administrar los paquetes que utilizamos a lo largo y ancho del sistema. APT no sólo instala los paquetes, también gestiona el índice local de paquetes y puede actualizar por completo el sistema.
APT es un comando de gran utilidad para Administradores de sistemas ya que se puede utilizar sobre conexiones SSH, entre otras ventajas.
Para comenzar podemos verificar si Nano, el editor de texto, se encuentra instalado, para ello utilizaremos:
$ apt -qq list nano
nano/bionic,now 2.9.3-2 amd64 [installed]
En la respuesta se puede leer que el paquete está instalado, la versión del paquete, arquitectura y la versión de ubuntu para la que fue desarrollado (Ubuntu Bionic Beaver).
apt-cache
De requerir más datos, APT tiene más que ofrecer, todo gracias a sus índices.
El índice local de paquetes es una base de datos almacenada en Ubuntu que funciona como un caché y resguarda los metadatos de cada uno de los paquetes instalados. Gracias a esto se le puede consultar mediante el comando apt-cache:
$ apt-cache policy nano
nano:
Installed: 2.9.3-2
Candidate: 2.9.3-2
Version table:
*** 2.9.3-2 500
500 https://in.archive.ubuntu.com/ubuntu bionic/main amd64 Packages
100 /var/lib/dpkg/status
Como se puede ver, apt-cache devolverá no sólo una respuesta positiva o negativa, también traerá detalles como la versión instalada, la última versión lanzada y la información del repositorio desde donde se obtuvo el paquete.
dpkg
En Debian y distribuciones basadas en Debian existe DPKG (Debian Package), la herramienta desde la cual podemos instalar, eliminar y compilar paquetes. La diferencia entre éste y APT es que DPKG no puede descargar e instalar automáticamente paquetes o sus dependencias.
Para verificar si un paquete está instalado con DPKG podemos hacerlo mediante el siguiente comando:
$ dpkg -l | grep -i nano
ii nano 2.9.3-2 amd64 small, friendly text editor inspired by Pico
En esta ocasión, la salida muestra al inicio ii, que significa que el paquete está instalado en el sistema, también se obtiene la versión, arquitectura y la descripción del paquete.
dpkg-query
Al igual que APT, DPKG tiene una base de datos donde almacena la lista de paquetes instalados, por lo que para hacer una consulta a esa base de datos utilizamos el comando dpkg-query:
$ dpkg-query --list | grep -i nano
ii nano 2.9.3-2 amd64 small, friendly text editor inspired by Pico
Y obtenemos la misma información que con el comando anterior, se podrían considerar como dos caminos a la misma solución.
which
Si el paquete que se busca se encuentra en el PATH, which es el comando más útil y rápido para verificar si un paquete está instalado.
$ which nano
/bin/nano
En el anterior comando se deduce que, si devolvió la ruta es señal de que el paquete está instalado y puede ser ejecutado.
Un detalle importante a mencionar es que which sólo busca dentro del PATH del usuario, es decir que no analiza paquetes compartidos por usuarios o que estén instalados en el directorio del usuario ROOT, es necesario iniciar sesión como un usuario en específico para utilizar el comando en la misma cuenta.
whereis
Similar a which, whereis es un comando que despliega la ruta en que el paquete se encuentra instalado, por lo que si no la muestra, es señal de que no está instalado.
$ whereis nano
nano: /bin/nano /usr/share/nano /usr/share/man/man1/nano.1.gz /usr/share/info/nano.info.gz
La gran diferencia entre éste y which es que mostrará las rutas tanto del usuario actual como de paquetes compartidos.
Además de mostrar la ruta del paquete binario o archivo ejecutable, también muestra la ruta de la fuente y el manual de uso del paquete.
locate
Al igual que otros gestores de paquetes, locate utiliza una base de datos para ubicar rápidamente un paquete en vez de revisar ruta por ruta como lo hace find.
$ locate --basename '\nano'
/usr/bin/nano
/usr/share/nano
/usr/share/doc/nano
Tal como whereis y which, locate regresa las rutas de los archivos binarios o ejecutables y de no ser así, significa que no están instalados.
La gran desventaja de locate es que podría no venir preinstalado en todas las distribuciones de Linux y es necesario instalarlo manualmente para poder disfrutar de los beneficios que ofrece.
¿El paquete está instalado?
Los anteriores son sólo 7 métodos para saber si un paquete está instalado en Linux, pero existen más como el comando find, un método nativo de uso general que también podría servir para localizar paquetes, pero su rapidez dependerá de la cantidad de datos almacenados ya que, como se mencionó antes, revisa ruta por ruta hasta encontrar lo que se busca.