Localización de archivos en el disco duro.

Para buscar en todo el disco duro los archivos que incluyan en su nombre la palabra 'foto':

$ locate foto

Si al usar el comando locate la lista de resultados es demasiado larga podemos usar el comando grep para filtrarla.

$ locate foto | grep .jpg

Locate es un excelente comando para utilizar en un sistema monousuario pero horrible en un sistema con varios usuarios independientes ya que permite a cualquiera poder consultar una base de datos con nada menos que los nombres de todos los archivos del disco. Con locate cada usuario podía conocer los nombres de los archivos privados de todos los demás usuarios, espiar su estructura de directorios, etc... aunque no tuviera acceso a ellos y con todas las posibles consecuencias. Bastaba con usar la cadena /home/nombre_del_usuario en la búsqueda para obtener una lista completa de todos sus archivos, sin excepción, que luego podía pasarse a un script. También podía obtenerse en una cómoda lista la versión actual de todos los programas del sistema. Todo ésto suponía un enorme agujero de seguridad al alcance de cualquiera que quisiese atacar el sistema desde dentro. Para solucionar ésto se creó una alternativa llamada slocate (secure locate), que toma nota de los permisos de cada archivo y sólo muestra los nombres de los archivos a los que puede acceder el usuario que lo ejecuta. Por ello es altamente recomendable convertir a locate en un simple enlace a slocate, de hecho en algunas distribuciones ya viene así por defecto. Su uso es similar al de locate pero en Debian hay que instalarlo aparte.

# apt-get install slocate
$ slocate *oto*.jpg

Esta búsqueda se va a terminar rápidamente. La razón es que no se hace la búsqueda recorriendo todos los directorios, sino que se busca en una base de datos que contiene todos los archivos del ordenador. Si queremos actualizar la base de datos tendremos que usar el comando updatedb:

# updatedb

En una instalación predeterminada de Debian, esta base de datos se actualiza todos los días a las seis y media de la mañana. Esto lo hace posible el script mlocate situado en el directorio /etc/cron.daily.

Si queremos cambiar la hora de todas las tareas que cron ejecuta diariamente (incluida esta actualización), tendremos que editar el archivo /etc/crontab, concretamente las dos primeras cifras de esta línea (podemos ver que, por defecto, se realiza a las seis y veinticinco):

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

Si simplemente queremos que pase a actualizarse semanal o mensualmente, moveremos el script mlocate a /etc/cron.weekly o /etc/cron.monthly, respectivamente.