IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Instal·lació

Sistemes de la família Debian

IMPORTANT: No es pot trobar el paquet amb dpkg -s:

$ whereis locate
locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
$ dpkg -S /usr/bin/locate
dpkg: /usr/bin/locate no trobat.

Realment el fitxer és un enllaç:

$ ls -la /usr/bin/locate
lrwxrwxrwx 1 root root 24 2009-07-27 09:31 /usr/bin/locate -> /etc/alternatives/locate

Això ens indica que poden haver-hi diverses implementacions de l'ordre locate, nosaltres utilitzarem slocate a Debian. Es poden configurar les alternatives amb l'ordre alternatives.

$ sudo update-alternatives --config locate
There is only one alternative in link group locate: /usr/bin/mlocate
Nothing to configure.

Ara si podeu buscar per:

 $ dpkg -S /usr/bin/mlocate 
mlocate: /usr/bin/mlocate

El nom del paquet és mlocate:

$ sudo apt-get install mlocate

Els fitxers instal·lats són:

$ sudo dpkg -L mlocate
/.
/var
/var/lib
/var/lib/mlocate
/etc
/etc/updatedb.conf
/etc/cron.daily
/etc/cron.daily/mlocate
/usr
/usr/share
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/updatedb.8.gz
/usr/share/man/man5
/usr/share/man/man5/mlocate.db.5.gz
/usr/share/man/man5/updatedb.conf.5.gz
/usr/share/man/man1
/usr/share/man/man1/mlocate.1.gz
/usr/share/doc
/usr/share/doc/mlocate
/usr/share/doc/mlocate/changelog.gz
/usr/share/doc/mlocate/NEWS.gz
/usr/share/doc/mlocate/AUTHORS
/usr/share/doc/mlocate/README
/usr/share/doc/mlocate/TODO.Debian
/usr/share/doc/mlocate/copyright
/usr/share/doc/mlocate/changelog.Debian.gz
/usr/bin
/usr/bin/mlocate
/usr/bin/updatedb.mlocate
/.
/usr
/usr/bin
/usr/bin/slocate
/usr/share
/usr/share/doc
/usr/share/doc/slocate
/usr/share/doc/slocate/README.gz
/usr/share/doc/slocate/README.Debian
/usr/share/doc/slocate/copyright
/usr/share/doc/slocate/changelog.gz
/usr/share/doc/slocate/Changelog.gz
/usr/share/doc/slocate/changelog.Debian.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/slocate.1.gz
/usr/share/man/man1/updatedb.slocate.1.gz
/var
/var/lib
/var/lib/slocate
/etc
/etc/cron.daily
/etc/cron.daily/slocate
$ which locate
/usr/bin/locate
$ type locate
locate is /usr/bin/locate
$ ls -la /usr/bin/locate
lrwxrwxrwx 1 root root 24 2009-08-04 20:59 /usr/bin/locate -> /etc/alternatives/locate

Sistemes rpm

El paquet que heu d'instal·lar és findutils-locate (comprovat a OpenSuse)

> whereis locate

locate: /usr/bin/locate /usr/bin/X11/locate /usr/share/man/man1/locate.1.gz

> rpm -qf /usr/bin/locate
> findutils-locate-4.4.0-38.27

Base de dades

La base de dades amb els fitxers del sistema es troba (tal i com pertoca segons l'estàndard FHS) a:

$ ls -lah /var/lib/mlocate/mlocate.db 
-rw-r----- 1 root mlocate 14M 2009-11-15 07:53 /var/lib/mlocate/mlocate.db

Automatització del procés

S'utilitza l'eina cron per tal d'automatitzar el procés d'actualització de la base de dades.

Configuració. Fitxer /etc/updatedb.conf

$ cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf"

El fitxer de configuració té un manual que podeu consultar amb:

$ man updatedb.conf

Totes les opcions anomenades PRUNE (podar/retallar en anglès), indiquen casos que no s'han d'emmagatzemar a la base de dades. Així si observeu, veureu que els fitxers que es troben en sistemes de fitxers especials (proc, devptx...) i de xarxa (NFS,samba) entre d'altres no s'afegeixen a la base de dades. També s'indiquen algunes carpetes com:

/tmp
/var/spool
/media

i podríem també saltar certes extensions amb PRUNENAMES:

# PRUNENAMES=".git .bzr .hg .svn"

Ordres

updatedb

Aquesta comanda actualitza l'index/base de dades de fitxers del sistema. Si la base de dades encara no existeix es crea i si existeix s'actualitza. Un cop creada la base de dades, l'ordre locate pot realitzar cerques a la base de dades, molt més ràpides que les realitzades directament al sistema de fitxers. El resultat és que disposem d'una ordre per cerca fitxers molt més ràpida que find.

$ sudo updatedb

Al tractar-se d'un procés que pot tardar cert temps, és recomanable que l'executeu en background .Cal afegir el símbol & al final de l'ordre:

$ sudo updatedb&

NOTA: L'ordre anterior pot no funcionar si heu d'introduir la paraula de pas per a sudo!

Té però alguns inconvenients:

  • L'espai: La base de dades ocupa un espai de disc. La mida de la base de dades no es gaire gran i en la majoria de sistemes actuals aquest inconvenient no és gaire important
  • Sincronització: Cada vegada que hi ha una modificació al sistema de fitxers, hauríem de tornar a executar updatedb per tal de mantenir la base de dades

sincronitzada.

  • Es necessiten permisos de superusuari per modificar la base de dades.

locate

Permet buscar fitxers:

$ locate nom_del_fitxer

Automatització del procés

S'utilitza l'eina cron per tal d'automatitzar el procés d'actualització de la base de dades.

Ordres

updatedb

Aquesta comanda crear l'index de fitxers del sistema i així permet fer cerques més ràpides (no com passa amb la comanda find que busca a tot el disc dur sense índexs...)

S'executa un cop al dia (vegeu el fitxer /etc/cron.daily/slocate)

 $ dpkg -L mlocate | grep cron
/etc/cron.daily
/etc/cron.daily/mlocate

Si consulteu el fitxer:

$ cat /etc/cron.daily/mlocate

Veureu que s'executa updatedb.mlocate:

$ ls -la /usr/bin/updatedb.mlocate
-rwxr-xr-x 1 root root 34488 2009-04-29 10:34 /usr/bin/updatedb.mlocate
$ whereis updatedb
updatedb: /usr/bin/updatedb /usr/bin/updatedb.mlocate /etc/updatedb.conf /usr/share/man/man8/updatedb.8.gz
$ ls -la /usr/bin/updatedb
lrwxrwxrwx 1 root root 26 2009-07-27 09:31 /usr/bin/updatedb -> /etc/alternatives/updatedb

Els processos especificats a cron.daily s'executen cada dia a les 6:25 segons l'establert a:

$ cat /etc/crontab 
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
#  command to install the new version when you edit this file
#  and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do. 

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

NOTA: si l'ordinador no està engegat a les 6:25 aleshores s'executa l'update en el moment que s'inicia l'ordinador


locate

Permet buscar fitxers

$ locate PATTERN

normalment escriurem:

$ locate nomfitxer

Per exemple:

$ locate document.odt

El patró accepta caràcters file globbing. Si no s'especifica cap tipus de caràcter de substitució (*,?...) aleshores el comportament per defecte és:

$ locate *paraula*

També es pot treballar amb expressions regulars utilitzant l'opció:

--regex is not specified, PATTERNs can contain globbing characters.  If any PATTERN contains  no  globbing  characters,  locate
      behaves as if the pattern were *PATTERN*.

A les cerques es diferencia entre majúscules i minúscules. Es pot modificar aquest comportament amb l'opció (-i --ignore-case)

Altres opcions són:

  • -b, --basename: només busca al base name (el nom del fitxer sense el path complet). És el contrari de --whole-name
  • -c, --count: Mostra el número de coincidències en la cerca.
  • -e, --existing: s'assegura que el fitxer encara existeix abans de mostrar-lo
  • -S, --statistics: Mostra estadístiques.
  • -q --quiet: no mostris errors

Podem consultar les estadístiques de la base de dades amb:

$ locate -S
Base de dades /var/lib/mlocate/mlocate.db:

65629 directoris 457738 fitxers 39433567 bytes en els noms de fitxers 14517153 bytes usats per a emmagatzemar la base de dades

Vegeu també