Comando locate in Linux: cercare percorsi nell’indice e aggiornare il database

locate cerca percorsi in un database costruito in precedenza, senza visitare ogni directory a ogni richiesta. Le ricerche nell’indice possono essere molto rapide, ma non garantiscono lo stato attuale: file nuovi possono mancare e nomi già eliminati possono rimanere nei risultati.

Gli esempi si riferiscono soprattutto a plocate, che alcune distribuzioni espongono anche come locate. Prima di usarli controlla locate --version, locate --help e man locate; se il comando disponibile si chiama soltanto plocate, usa quel nome. Un comando assente, un database non ancora creato e una ricerca senza corrispondenze sono problemi diversi.

Cos'è il comando locate?

A seconda della distribuzione, il programma può essere plocate, mlocate o GNU locate. updatedb costruisce o aggiorna l’indice; un’attività pianificata può eseguirlo periodicamente. Il database contiene nomi di percorsi, non il contenuto dei file. Percorso del database, esclusioni, controlli di visibilità e opzioni dipendono dal programma e dalla configurazione locale.

Sintassi di base

locate [OPTION]... PATTERN...

OPTION e PATTERN sono segnaposto, non parole da copiare letteralmente. In plocate, più pattern devono corrispondere tutti allo stesso percorso; mlocate normalmente accetta una corrispondenza con almeno uno, salvo -A. Non trasferire una ricerca con più argomenti fra implementazioni senza controllarne il significato.

Uso base di locate

Cercare una parte del percorso

In plocate una stringa senza metacaratteri glob cerca una sottostringa del percorso completo: nginx.conf può trovare anche /etc/nginx/nginx.conf.backup o un nome di directory. Non è una ricerca nel contenuto e non garantisce un nome esatto. Il risultato dipende da ciò che è stato indicizzato e da ciò che l’utente può vedere.

locate nginx.conf

Ignorare maiuscole e minuscole

-i può trovare, per esempio, README.md cercando readme.md. In plocate il confronto dipende dal locale e non implementa tutte le equivalenze Unicode: non dare per scontato che caratteri come ß corrispondano a ss.

locate -i readme.md

Verificare che i percorsi esistano ancora

-e o --existing controlla l’esistenza delle voci già presenti nell’indice: non aggiunge file nuovi al database. Gli apici proteggono *.service dall’espansione della shell; in plocate il glob si applica al percorso completo. Per cercare la stessa estensione solo nel nome finale aggiungi -b. Con plocate, -e non segue i collegamenti simbolici: anche un collegamento con destinazione mancante può esistere come voce.

locate -e '*.service'

Perché una ricerca rapida può restituire dati vecchi

Il comando seguente può mostrare /etc/passwd se il percorso è presente nell’indice ed è visibile all’utente. È un esempio di interrogazione, senza modifiche al file: non richiede che tu lo crei o lo apra.

locate /etc/passwd

Possibile output, non garantito su ogni sistema:

/etc/passwd

La ricerca per sottostringa può restituire anche altri percorsi contenenti /etc/passwd. Se un file appena creato non compare, controlla il database utilizzato, le esclusioni e l’ultimo aggiornamento; se un file eliminato compare ancora, prova -e. Per una verifica immediata in una directory conosciuta, usa find per cercare nel filesystem corrente: per esempio find . -name nginx.conf -print nella directory da esaminare. Anche quella scansione legge uno stato che può cambiare mentre procede.

Opzioni principali

Opzione Scopo
-i Confronta senza distinguere maiuscole e minuscole, con i limiti del locale e del programma.
-e, --existing Verifica l’esistenza delle voci indicizzate; non scopre nuovi percorsi.
-b, --basename Confronta solo il nome finale, ma stampa comunque il percorso completo.
-c, --count Stampa il conteggio anziché i singoli percorsi.
-l N, --limit N Si ferma dopo N corrispondenze; con -c il conteggio è al massimo N.
-r REGEXP In plocate interpreta una regex POSIX di base; --regex usa invece la sintassi estesa. Le ricerche regex richiedono una scansione lineare dell’indice.
-d DBPATH Sceglie un database o un elenco nel formato supportato; il file deve essere leggibile e compatibile con il programma.

Esempi pratici

Cercare un nome finale esatto

Con plocate, -b esclude dal confronto le directory e --regex abilita un’espressione regolare POSIX estesa. Gli ancoraggi ^ e $ delimitano l’intero nome: l’esempio trova hosts, non hosts.bak o myhosts. Gli apici impediscono alla shell di reinterpretare il pattern. Controlla che la tua implementazione supporti --regex; questa opzione privilegia la precisione del confronto e può essere più lenta della ricerca per sottostringa.

locate -b --regex '^hosts$'

Conta o limita i risultati

Il primo comando conta i percorsi visibili che contengono cache; il secondo ne mostra al massimo 20. Un risultato pari a zero è possibile. Con plocate, combinare -c e -l 20 limita anche il numero contato: non sarebbe il totale completo. Plocate restituisce stato 1 sia quando non trova corrispondenze sia in caso di errore; leggi i messaggi diagnostici, senza interpretare ogni stato 1 come un database guasto.

locate -c cache
locate -l 20 cache

Aggiorna l'indice del sistema

Prima di un aggiornamento manuale, controlla il meccanismo previsto dalla distribuzione: con systemd, systemctl list-timers --all aiuta a individuare il timer effettivo; altre installazioni possono usare cron. Il nome del timer e la frequenza non sono universali. Consulta man updatedb e la configurazione locale, normalmente /etc/updatedb.conf per plocate.

sudo updatedb è un’operazione amministrativa che aggiorna il database di sistema e può generare molto lavoro sul disco. Eseguila solo se gestisci quel sistema e il programma/configurazione sono quelli desiderati: non serve per ogni ricerca e non elimina le esclusioni configurate. Dopo un aggiornamento riuscito, ripeti la stessa query; una directory esclusa continuerà a non fornire i suoi file.

sudo updatedb

locate e i comandi correlati

Comando Ruolo principale Quando usarlo
locate Ricerca di nomi in un indice Individuare percorsi già indicizzati
find Scansione delle directory correnti Verificare lo stato attuale e applicare test su tipo, data o dimensione
which Ricerca di eseguibili nelle directory di PATH Individuare un programma esterno; per alias e funzioni della shell considera anche command -v
whereis Ricerca in posizioni note relative ai programmi Trovare binari, sorgenti e pagine di manuale

Avvertenze importanti

L'indice può essere obsoleto

Controlla anche le esclusioni: in plocate PRUNEPATHS, PRUNEFS, PRUNENAMES e le regole sui bind mount possono impedire la scansione di sottodirectory. La directory esclusa può comparire nell’indice senza che compaiano i suoi file. Un aggiornamento riuscito non prova che tutto il disco sia stato indicizzato; non rimuovere le esclusioni solo per ottenere più risultati.

Considerare visibilità e dati riservati

Il normale database di sistema di plocate usa controlli sui permessi delle directory per limitare i nomi mostrati all’utente. Un database privato o configurato diversamente può avere regole differenti: chi può leggerlo direttamente può ricavarne i nomi indicizzati. Non condividere un indice pensando che i soli controlli delle ricerche proteggano i dati e non usare sudo per aggirare un risultato mancante.

Distinguere pattern e formati di output

In plocate, senza metacaratteri il pattern è una sottostringa; con metacaratteri come *, ? o [] non preceduti da un backslash nel pattern, diventa un glob dell’intero percorso. Gli apici della shell mantengono il pattern come un solo argomento, ma non disattivano i glob interpretati da plocate. Per una sottostringa glob servono quindi gli asterischi opportuni ai due estremi. Non confondere glob, regex di base e regex estese. Per passare risultati a un altro programma, -0 separa i percorsi con un byte NUL: serve un destinatario che legga quel formato, perché i nomi possono contenere spazi o nuove righe. Non trattare un elenco di righe come comandi da eseguire.

FAQ

Perché locate non è installato?

Alcune distribuzioni non lo includono nell’installazione iniziale. Controlla il gestore pacchetti e la documentazione della tua distribuzione: il pacchetto può chiamarsi plocate o mlocate e il comando disponibile può avere un nome diverso. Installare il programma e creare il primo database sono operazioni distinte.

Perché non può trovare un file che ho appena creato?

Il file può essere successivo all’ultimo aggiornamento, trovarsi in un’area esclusa o non essere visibile all’utente. Controlla indice e configurazione; per verificarlo subito usa find nella directory interessata. L’opzione -e non aggiunge voci mancanti.

updatedb richiede sempre sudo?

Il database di sistema normalmente richiede privilegi amministrativi. Il manuale di plocate documenta anche un indice privato tramite updatedb -l 0 -o db_file -U source_directory: occorrono una directory sorgente leggibile e un file di destinazione nuovo in una posizione privata, poi la ricerca usa locate -d db_file PATTERN. Sostituisci i segnaposto, non sovrascrivere database esistenti e proteggi db_file: ogni utente che può leggerlo può ricavarne l’elenco dei percorsi.

Perché locate mostra un file eliminato?

Può essere una voce non ancora rimossa dall’indice. Usa -e per controllare l’esistenza o aggiorna il database previsto dalla configurazione, poi ripeti la query. I controlli non bloccano modifiche successive ai file; in plocate un collegamento simbolico interrotto va distinto da un percorso completamente rimosso.

Fonti e documentazione