Contents

Herramientas de búsqueda desde la línea de comandos en GNU/Linux

GNU/Linux nos da la posibilidad de afrontar las distintas acciones que debemos realizar de muchas formas distintas, pues suele haber una gran cantidad de herramientas a nuestro alcance destinadas a realizar la misma acción pero con matices distintos. Conocer las distintas herramientas destinadas a “realizar una misma acción” puede parecer absurdo, pero a menudo nos ofrece la posibilidad de realizar nuestras labores de una forma mucho más rápida y eficiente. En esta entrada repasaremos las herramientas de búsqueda de línea de comandos que incorpora GNU/Linux y aprenderemos a usar cada una cuando corresponda. El orden en el que se enumeran estas herramientas no es aleatorio, se trata del orden que deberíamos seguir a la hora de buscar un archivo en términos de eficiencia.

Whereis, la simplicidad

Whereis es una herramienta de búsqueda muy simple en cuanto a funciones, pero que lo poco que hace lo hace de forma muy muy eficiente. Esta herramienta está destinada a buscar el binario, el código fuente y la página de manual de un comando especificado. Si bien su uso queda limitado a búsquedas muy concretas, el hecho de tener que buscar entre tan pocos elementos la convierte en la más eficiente de las herramientas que vamos a repasar.

1
whereis [opciones] [nombre] 

Cuando vayamos a realizar una búsqueda, en primera instancia, conviene perder medio segundo en plantearse si whereis puede ofrecernos lo que estamos buscando, ya que de ser así será la herramienta que menos consuma a la hora de hacerlo y que menos tardará en dar con lo que buscamos.

Whereis no dispone de muchas opciones, -b, -m i -s limitarán nuestra búsqueda a binarios, páginas de manual y source code, en cambio -B, -M y -S nos permitirán limitar la carpeta de búsqueda de cada uno de ellos.

Locate, la velocidad

Locate ya se empieza a asemejar a lo que es una herramienta de búsqueda al uso, pues intentará localizar cualquier archivo del sistema cuyo nombre concuerde con el patrón que le especifiquemos.

1
locate [opciones] [patrón] 

La “gracia” que tiene locate sobre el omnipotente find (que revisaremos a continuación) es que no realiza la búsqueda sobre el sistema de ficheros, sino que lo hace contra una base de datos donde está indexado todo nuestro árbol de directorios. El hecho de que las consultas se hagan contra una base de datos dota a locate de una velocidad increíble, y de un ahorro de procesamiento muy alto.

La parte negativa de atacar a una base de datos en vez de al sistema de archivos en si es que cabe la posibilidad de que nuestra base de datos esté desactualizada. Podemos actualizar nuestra base de datos de locate con el comando “updatedb” que se encargará de recorrer e indexar nuestro sistema de archivos. Como lanzar a mano este comando sería algo tedioso y absurdo, la mayoría de las distribuciones tienen una tarea en cron encargada de actualizar dicha base de datos. El problema puede venir en el caso de que nuestra base de datos se haya actualizado hace 20 minutos y lo que buscamos se haya creado hace 19, puesto que si intentamos utilizar el comando locate para encontrarlo no lo vamos a conseguir.

El otro aspecto negativo que acompaña a la herramienta es que sólo realiza búsquedas sobre el nombre de archivo, por lo que en el caso de que queramos utilizar otro criterio en nuestra búsqueda deberemos acudir a find, que ofrece muchos más recursos en ese sentido.

Como apunte señalar que en la mayoría de distribuciones locate es un enlace simbólico hacia mlocate o slocate, que son modificaciones de locate destinadas a solucionar algunos de los problemas ligados a la propia herramienta.

Por lo general utilizaremos locate cuando no estemos buscando el binario, el código fuente y la página de manual de una aplicación (puesto que utilizaremos whereis) y cuando nuestro criterio de búsqueda sea el nombre de archivo.

Find, la bestia

De las tres herramientas que repasamos en este artículo find es la más potente. Find es LA herramienta de búsqueda de GNU, con la que podremos encontrar cualquier cosa dentro de nuestro sistema de archivos siempre y cuando sepamos manejarla y tengamos permisos para acceder al directorio en el que queremos buscar.

1
find [opciones] [ruta] [patrón] 

Find realiza una búsqueda de fuerza bruta sobre el directorio especificado, recorriendo la ruta y mostrando todo lo que coincida con nuestro criterio.

La potencia de find es infinita. A diferencia de whereis y locate, find nos permite utilizar como criterio de búsqueda cualquier propiedad que queramos: nombre (-name), permisos (-perm), propietario (-uid o -user), grupo (-gid o -group), tamaño (-size) y muchos más criterios que podemos como siempre consultar en la página man de la aplicación. Además, a diferencia de locate, la búsqueda es en tiempo real, por lo que siempre tendremos la certeza de que si hemos realizado la búsqueda y no hemos encontrado ningún archivo será porque en este momento no existe.

El punto negativo de esta herramienta es precisamente en lo que las anteriores dos herramientas son espectaculares: la velocidad y eficiencia en la búsqueda. Recorrer todo un árbol de directorios requiere una buena cantidad de tiempo, y si bien con find podemos acotar la ubicación donde queremos realizar la búsqueda, si necesitamos buscar sobre un directorio grande o sobre la raíz del sistema veremos como podemos dejarlo corriendo e ir a prepararnos un café mientras se realiza la operación.

Es por esto último por lo que find debería ser nuestra última opción cuando vamos a buscar un archivo en nuestro sistema, pero si las anteriores dos herramientas no cumplen nuestras necesidades no debemos dudar en acudir a find, porque si está en nuestro sistema seguro que lo encontramos.