Tag Archives: locate

Diferencias entre locate, slocate, mlocate y rlocate

Analizamos estos cuatro programas de GNU/Linux que sirven exactamente para lo mismo (buscar archivos en el disco) y que se usan casi de la misma forma.

Ejemplo de uso, buscamos el archivo sshd_config en todo el sistema de ficheros:

$ locate sshd_config

/etc/ssh/sshd_config

/usr/man/man5/sshd_config.5.gz

LOCATE

El comando locate se usa para buscar archivos en el disco duro. A diferencia del comando find, que es increíblemente potente, locate sólo puede hacer búsquedas simples por nombre de archivo. A cambio de sus limitadas posibilidades, locate es rápido, muy rápido. El truco está en que no busca a lo largo del disco duro como hace find, sinó que busca en una base de datos propia. Esta base de datos es actualizada por el programa updatedb.

Cuando ejecutamos updatedb, esta base de datos se actualiza. Si hacemos cualquier cambio en los archivos (crear, borrar, mover, etc) y después buscamos algo con locate, este va a buscar en una base de datos que no se corresponde exactamente al estado actual del disco. Es por esto que la mayoría de distribuciones de GNU/Linux ejecutan updatedb de forma automatizada (usando cron) de forma periódica, pero la búsqueda puede no ser perfecta a no ser que usemos el comando updatedb justo antes de usar el comando locate.

El primer problema que tiene locate es que updatedb tarda bastante en recorrer el disco duro. El segundo, mucho más grave, es que si existe una base de datos de todos los archivos del disco y esta puede ser consultada por los usuarios, estos pueden conocer el contenido de los directorios a los que no tienen acceso.

Los comandos locate, updatedb y find (entre otros) són parte del paquete findutils de GNU.

SLOCATE

Ya hemos visto los problemas de seguridad que nos encontramos al guardar una base de datos de los archivos en disco si esta puede ser libremente consultada. Slocate (o Secure Locate) viene a solucionar este problema. La gracia está en que cuando se ejecuta updatedb, la base de datos no guarda sólo el nombre de los archivos, sinó que añade los permisos (propietario, grupo, etc). De esta forma, slocate sólo muestra al usuario la información adecuada, la de los archivos a los que tiene acceso.

MLOCATE

En slocate vemos que el problema de seguridad está solucionado, ahora vamos a conocer mlocate (o Merging Locate) que además de implementar la misma solución (está basado en slocate), soluciona el grave problema de velocidad del comando updatedb. Lo que hace mlocate cuando ejecutamos updatedb no es crear una base de datos entera de todos nuestros archivos, sinó guardar sólo las diferencias a la base de datos original, por lo que updatedb es mucho más rápido si han habido pocos cambios.

RLOCATE

Aquí vamos a dejar de lado la tradicional idea de ejecuto updatedb, luego busco. Pero también dejamos de lado la simpleza de los programas anteriores. Rlocate consta, además, de un módulo para el kernel y de un daemon, todos bajo el mismo nombre. Estos son necesaros para que la base de datos se actualize sóla y no necesitemos usar updatedb. A medida que vamos creando/eliminando archivos en el sistema, rlocate crea bases de dafos diferenciales en tiempo real. Sólo vamos a usar updatedb para optimizar la base de datos. Parece ser la mejor solución, el único problema es el propio hecho de estar cargando un módulo y un daemon sólo para poder buscar archivos, la mayoría de la gente prefiere la simpleza de usar slocate o mlocate.

Una vez analizados los cuatro, está muy claro que ganan mlocate y rlocate, el uso de uno u otro dependerá de las ganas de complicarse preparando el sistema para que funcione rlocate (que tampoco hay para tanto) o si preferimos la simpleza de instalar y usar. Aunque en realidad lo normal es no molestarse mucho con el tema y usar lo que incluya nuestra distribución, que con toda probabilidad va a ser slocate o mlocate.