Introduzione

Una delle operazioni più comuni quando si lavora su Linux è la ricerca di file e directory. Sui sistemi Linux, ci sono diversi comandi che ti consentono di cercare file, find e locate sono i più usati.

Il comando locate è il modo più rapido e semplice per cercare file e directory con i loro nomi.

In questo tutorial, spiegheremo come usare il comando locate.

Installazione comando locate

A seconda della distribuzione e del modo in cui è stato eseguito il provisioning del sistema, il pacchetto locate può o meno essere preinstallato sul proprio sistema Linux.

Per verificare se l'utilità locate è installata sul sistema, aprire il terminale, digitare locate e premere INVIO. Se il pacchetto è installato, verrà visualizzato il sistema locate: no pattern to search for specified, altrimenti vedrai qualcosa di simile locate command not found.

Se locate non è installato, puoi installarlo facilmente utilizzando il gestore pacchetti della tua distribuzione.

Installare locate su Ubuntu e Debian

sudo apt update
sudo apt install mlocate

Installa locate su CentOS e Fedora

sudo yum install mlocate

Come funziona locate

Il comando locate cerca un determinato modello attraverso un file di database generato dal comando updatedb. I risultati trovati vengono visualizzati sullo schermo, uno per riga.

Durante l'installazione del pacchetto mlocate, viene creato un processo cron che esegue il comando updatedb ogni 24 ore. Questo assicura che il database sia aggiornato regolarmente. Per ulteriori informazioni sul processo cron, consultare il file /etc/cron.daily/mlocate.

Il database può essere aggiornato manualmente eseguendo il comando updatedb come root o utente con privilegi sudo:

sudo updatedb

Il processo di aggiornamento richiederà del tempo, a seconda del numero di file e directory e della velocità del sistema.

I file creati dopo l'aggiornamento del database non verranno visualizzati nei risultati di individuazione.

Rispetto al comando find che è più potente e cerca file system, locate funziona molto più velocemente ma manca di molte funzionalità e può eseguire ricerche solo tramite il nome del file.

Come usare il comando locate

La sintassi per il comando locate è la seguente:

locate [OPTION] PATTERN...

Nella sua forma più semplice, se usato senza alcuna opzione il comando locate stamperà il percorso assoluto di tutti i file e le directory che corrispondono al modello di ricerca e per i quali l'utente ha il permesso di lettura.

Ad esempio, per cercare un file chiamato .bashrc devi digitare:

locate .bashrc

L'output includerà i nomi di tutti i file che contengono la stringa .bashrc nei loro nomi:

/etc/bash.bashrc
/etc/skel/.bashrc
/usr/share/base-files/dot.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/bash.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/skel/dot.bashrc

Il file /root/.bashrc non verrà visualizzato perché abbiamo eseguito il comando come utente normale che non dispone delle autorizzazioni di accesso alla directory /root.

Se l'elenco dei risultati è lungo, per una migliore leggibilità è possibile reindirizzare l'output al comando less:

locate .bashrc | less

Il comando locate accetta anche modelli contenenti caratteri globbing come il carattere jolly *. Quando il modello non contiene caratteri di disturbo il comando cerca *PATTERN*, ecco perché nell'esempio precedente sono stati visualizzati tutti i file che contengono il modello di ricerca nei loro nomi.

Il carattere jolly è un simbolo utilizzato per rappresentare zero, uno o più caratteri. Ad esempio, per cercare tutti i file .md sul sistema dovresti usare:

locate *.md

Per limitare i risultati della ricerca, utilizzare l'opzione -n seguita dal numero di risultati che si desidera visualizzare. Ad esempio, il comando seguente cercherà tutti i file .py e visualizzerà solo 10 risultati:

locate -n 10 *.py

Per impostazione predefinita, locate esegue ricerche con distinzione tra maiuscole e minuscole. L' opzione -i(--ignore-case) indica a locate di ignorare le maiuscole e di eseguire ricerche senza distinzione tra maiuscole e minuscole.

locate -i readme.md
/home/noviello/p1/readme.md
/home/noviello/p2/README.md

Per visualizzare il conteggio di tutte le voci corrispondenti, utilizzare l' opzione -c( --count). Il seguente comando restituirebbe il numero di tutti i file che contengono .bashrc nei loro nomi:

locate -c .bashrc
5

Per impostazione predefinita, locate non controlla se i file trovati esistono ancora nel file system. Se un file è stato eliminato dopo l'ultimo aggiornamento del database se il file corrisponde al modello di ricerca, verrà incluso nei risultati della ricerca.

Per visualizzare solo i nomi dei file esistenti al momento locate dell'esecuzione, utilizzare l' opzione -e( --existing). Ad esempio, quanto segue restituirebbe solo i .json file esistenti :

locate -e *.json

Se è necessario eseguire una ricerca più complessa, è possibile utilizzare l' opzione -r( --regexp) che consente di eseguire ricerche utilizzando una regexp di base anziché i pattern. Questa opzione può essere specificata più volte.
Ad esempio per due tipi di estensione di file, cercare tutti i file .mp4 e .avi:

locate --regex -i "(\.mp4|\.avi)"

Conclusione

Il comando locate cerca nel file system file e directory il cui nome corrisponde a un determinato modello. La sintassi del comando è facile da ricordare e i risultati sono mostrati quasi istantaneamente.

Per ulteriori informazioni sul comando locate, digitare man locate nel terminale.