El comando «locate» de Linux es una herramienta utilizada para localizar archivos rápidamente en el sistema operativo a través de la línea de comandos.
Realiza una búsqueda rápida utilizando una base de datos configurada en el fichero /etc/updatedb.conf.
[root@server1 ~]# cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS = "yes"
PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs"
PRUNENAMES = ".git .hg .svn"
PRUNEPATHS = "/afs /media /net /sfs /tmp /udev /var/cache/ccache /var/spool/cups /var/spool/squid /var/tmpi /serveis"
[root@server1~]#
¿Cómo se utiliza el comando locate?
Para encontrar archivos con el comando locate, simplemente escribiremos «locate nombre_archivo«. Veámos un ejemplo:
[root@server1~]# locate scsi_id
/lib/udev/scsi_id
/sbin/scsi_id
/usr/share/man/man8/scsi_id.8.gz
[root@server1~]#
Como podemos comprobar, ha encontrado el binario «scsi_id» y el fichero comprimido gz de la ayuda del comando en el man.
También podemos utilizar expresiones regulares con el parámetro «-r» para encontrar archivos con el comando locate:
[root@server1~]# locate -r scsi* |head -5
/dev/.udev/db/scsi_generic:sg0
/dev/.udev/db/scsi_generic:sg1
/dev/.udev/db/scsi_generic:sg2
/dev/.udev/db/scsi_generic:sg3
/dev/.udev/db/scsi_generic:sg4
[root@server1~]#
Si queremos saber cuántos resultados hemos obtenido en nuestra búsqueda, utilizaremos el parámetro «-c»:
[root@server1 ~]# locate -c scsi_id
3
[root@server1 ~]#
Si queremos ignorar las mayúsculas usaremos añadiremos el parámetro «-i».
Con «man locate» tenemos información detallada sobre lo que hace cada parámetro.
Otra manera útil de encontrar archivos en Linux, es mediante el comando find.
Actualizar la base de datos mlocate.db
El comando locate utiliza la base de datos mlocate.db, por defecto. Y se utiliza automáticamente de manera periódica. Si queremos actualizarla manualmente, utilizaremos el comando updatedb.
Una de las razones más frecuentes por las que se actualiza esta base de datos, es porque hemos modificado el fichero /etc/updatedb.conf, añadiendo o eliminando algún punto de montaje o filesystem.
En el siguiente ejemplo, he añadido un filesystem del sistema que quiero que el comando locate ignore para que la base de datos mlocate.db ocupe menos espacio:
[root@server1~]# df -hP /var
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-varvol 9.3G 6.9G 1.9G 79% /var
[root@lensnax1 ~]# vi /etc/updatedb.conf
[root@lensnax1 ~]# updatedb
[root@lensnax1 ~]# df -hP /var
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-varvol 9.3G 6.8G 2.1G 77% /var
[root@server1~]#
Error /var/lib/mlocate/mlocate.db’: No such file or directory
A veces, el comando locaeda el siguiente error:
[root@server1 ~]# locate java
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
[root@server1 ~]#
Lo más probable es que se haya corrompido la base de datos mlocate.db y debamos recrearla con el comando updatedb.
[root@server1 ~]# updatedb
[root@server1 ~]# locate java
/etc/.java
/etc/java
/etc/.java/.systemPrefs
/etc/alternatives/alt-java
/etc/alternatives/alt-java.1.gz
/etc/alternatives/java
/etc/alternatives/java.1.gz
/etc/crypto-policies/back-ends/java.config
/etc/dnf/modules.d/javapackages-runtime.module
/etc/java/java-1.8.0-openjdk
/etc/java/security
/etc/java/java-1.8.0-openjdk/java-1.8.0-openjdk-1.8.0.292.b10-0.el8_3.x86_64
/etc/java/java-1.8.0-openjdk/java-
Mi pasión por la tecnología me lleva constantemente a explorar las últimas tendencias y aplicaciones, buscando siempre formas de implementar soluciones innovadoras que mejoren la eficiencia. En puerto53.com comparto contenido valioso para ayudar a otros profesionales y entusiastas de la informática a navegar y dominar el complejo mundo de la tecnología. Mi especialidad en Linux RedHat.
Más sobre mí en el este enlace,