Planeta TTY

Busqueda Agil y Veloz: Uso de locate, whereis y which

Posted in Comandos Basicos by Jorgito Capurro on 14 julio 2009

Seguramente, el comando de busqueda mas tradicional de GNU/Linux es el comando find. Este comando permite infinidades de parametros de busqueda, por lo cual lo hace el comando ideal para buscar algun archivo en nuestro sistema. Pero como todo lo bueno, tiene algo malo. Esta desventaja se refiere con la velocidad que presenta los resultados.
El comando find no posee ninguna indexacion para agilizar sus busquedas en el sistema, por lo cual, el tiempo de respuesta estara condicionado en funcion del tamaño de nuestro sistema de archivos.
Para cubrir este problema, existen los comandos locate, whereis y which. Estos comandos son reconocidos por su gran velocidad de respuesta. Pasemos a revisar sus ventajas y desventajas con respecto a otros comandos de busqueda.

Comando locate

Comenzemos con el mas potente de los tres y seguramente el mas popular tambien: el comando locate. El comando locate tiene la misma funcionalidad que find, es decir, se encarga de buscar archivos. Pero no tiene la totalidad de la potencia de find, por lo que los parametros de busqueda se ven claramente acotados. Su gran diferencia con find es que este ultimo es muy potente a la hora de buscar un archivo en particular, pero como dije anteriormente, es muy lento en sistemas grandes. El comando locate viene a subsanar este problema, obviamente perdiendo calidad en los parametros de busqueda. Veamos como utilizar este comando:

Sintaxis

locate [Opciones] Patron

El secreto de la rapidez y agilidad del comando locate es el utilizar una base de datos puramente indexada con los archivos que poseemos en el sistema. Es decir, no se busca directamente en el sistema de archivos en si, sino que se busca por esta base de datos. Obviamente, esta base de datos tiene que estar creada de antemano. La desventaja de este sistema es que puede resultar que en determinadas ocaciones esta base de datos se encuentre desactualizada y no encontremos lo que estamos buscando.

Veamos un ejemplo de como utilizar locate para buscar un archivo en particular:

$ locate sound

Este comando se encargara de buscar en la base de datos todos los registros que posean la palabra sound. A continuacion se muestra una parte de la salida de este comando, puesto que es demaciado grande para mostrarla en su totalidad y careceria de sentido:

/etc/esound
/etc/sound
/etc/acpi/resume.d/67-sound.sh
/etc/esound/esd.conf
/etc/java-6-openjdk/sound.properties
/etc/ld.so.conf.d/libasound2.conf
/etc/sound/events
/etc/sound/events/battstat_applet.soundlist
/etc/sound/events/gnome-2.soundlist
/etc/sound/events/gtk-events-2.soundlist

En lo que respecta a la base de datos, como mensione con anterioridad, puede pasar que este desactualizada. Aunque comunmente se actualiza sola mediante un proceso batch, podemos forzar la actualizacion de la misma mediante el siguiente comando:

$ sudo updatedb

Tambien, podemos restringir la cantidad de resultados que queremos visualizar por pantalla, mendiante el uso de la opcion -n. Apareceran los primeros n resultados, segun el orden que esten almacenados en la base de datos.

$ locate sound -n5

El comando anterior, mostrara por pantalla los primeros 5 registros encontrados que coincidan con el patron sound. Por ultimo, otra opcion que puede resultar de interes en la opcion -b, la cual indica que el patron de busqueda sea exacto. Por ejemplo, si en la base de datos se encuentran los archivos ‘Datos.txt‘ ,’Datos de Log.txt”, “LogDatos.txt“, el siguiente comando:

$ locate -b Datos

Arrojaria como resultado “Datos” y “Datos de Log.txt”, ya que en los nombre de los archivos contienen el patron exacto de busqueda, que en este caso es la palabra Datos. El archivos “LogDatos.txt” quedaria excluido ya que no contiene la palabra Datos exactamente.

Comando whereis

Pasemos ahora a otro comando de mucha utilidad, pero con fines totalmente diferentes: el comando whereis. El comando whereis se caracteriza por buscar un determinado patron (comunmnete, un archivo binario) solamente en los PATH que vienen predefinidos. Es decir, no hace una busqueda exahustiba sobre todo el sistema de archivos, sino por determinados directorios, los cuales son mayormente donde se encuentran almacenados los archivos binarios. Podriamos definir a el comando whereis como un busquscador de archivos binarios agil, ya que esa seria su principal tarea. A modo extra, tambien nos arroja la ruta donde se encuentran ubicadas las paginas man del programa, y tambien en lo posible, la ruta donde se encuentra su codigo fuente (si es que lo posee).

Sintaxis

whereis [Opciones] [Fichero]

Ahora bien, veamos un ejemplo basico de como utilizar este comando. Supongamos que hemos instalado nuestro querido navegador Mozilla Firefox, y queremos saber la ruta donde se encuentra almacenado el archivo binario. Para poder obtener esta informacion, nos valemos del comando whereis (¿Donde estas?) de la siguiente manera:

$ whereis firefox
firefox: /usr/bin/firefox /usr/lib/firefox /usr/share/firefox

¿Sencillo no? Supongamos ahora que queremos saber la ruta donde se encuentra almacenado el comando ls. Lo podriamos hacer de la siguiente manera:

$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz

Como podemos observar en su salida, el anterior comando nos retorno dos directorios diferentes. El primero (/bin/ls) son indica la ruta donde se encuentra el archivo binario, y el segundo (/usr/share/man/man1/man1/ls.1.gz) es la ruta donde se encuentran almacenadas las paginas del manual. Podriamos querer saber solamente donde se encuentran los binarios, para ello, usamos la opcion -b de esta forma.

$ whereis -b ls
ls: /bin/ls

Tambien, mediante las opciones -s y -m podemos buscar solamente el codigo fuente o la pagina del manual, respectivamente.

Comando which

El ultimo comando que veremos aqui, es el comando which. Este comando se asimila mucho a el comando whereis, ya que tiene la misma funcionalidad: buscar binarios. A diferencia de whereis, el comando which se encarga pura y exclusivamente a esta tarea. Veamos como utilzarlo.

Sintaxis

which [-a] Binario

Como vemos, este pobre comando solo tiene una opcion que -a. Esta opcion sirve para que which arroje todos los resultados que coinciden, ya que por defento, muestra solo el primero. Veamos un ejemplo de este comando:

$ which time
/usr/bin/time

Como observamos, solo nos retorna al primer ocurrencia encontrada sobre el comando time. Si queremos visualizar todas, usamos la opcion -a, como en el ejemplo que sigue a continuacion:

$ which -a time
/usr/bin/time
/usr/bin/time.1

¡Ajam! Mediante la utilizacion del comando which y su opcion de busqueda de duplicados, acabo de encontrar que por alguna razon el comando time lo tengo duplicado en el sistema. Como vemos, un comando que pareciera que carece de utilidad, se convierte en un comando de mucha ayuda si lo sabemos usar.

Espero que les halla sido de utilidad

Saludos

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: