locate
è uno strumento Unix utilizzato per trovare file per nome nel filesystem, che utilizza un database predefinito di file generati (creato utilizzando updatedb
). Usando locate
è più veloce di find
, ma è necessario aggiornare il database per trovare i file appena aggiunti.
locate
è stato creato nel 1982, con le versioni BSD e GNU Findutils derivanti dall’implementazione originale.
plocate è più recente (la prima versione stabile è stata meno di un anno fa), molto più veloce locate
. Si basa su elenchi di pubblicazione, fornendo ricerche molto più veloci su un indice molto più piccolo.
Lo strumento da riga di comando è un sostituto rapido di mlocate
(Merging Locate; un database ad accesso limitato, che mostra solo i nomi di file accessibili all’utente) in quasi tutti gli aspetti, incluso il riutilizzo del mlocate
database (plocate crea il proprio indice usando plocate-build
che legge il database creato da updatedb
), e è veloce sia su SSD che su HDD.
plocate funziona creando un indice invertito sui trigrammi (combinazioni di tre byte) nelle stringhe di ricerca, che gli consente di restringere rapidamente l’insieme dei candidati a un elenco molto piccolo, invece di scansionare linearmente ogni voce. Esegue quasi tutto l’I/O in modo asincrono utilizzando io_uring, se disponibile (Linux 5.1+), che riduce l’impatto della latenza di ricerca sui sistemi senza SSD.
Potrebbe interessarti anche: Come trovare i file modificati negli ultimi N giorni o minuti usando find
Per mostrare quanto è veloce plocate rispetto a mlocate, lo sviluppatore plocate mostra questo benchmark sulla homepage dello strumento in cui plocate è in grado di trovare 2 file su 27 milioni in pochi millisecondi:
Inoltre, come mlocate
, plocate mostra tutti i file che corrispondono alla query di ricerca solo se sono visibili all’utente che esegue il comando, ignorando tutti i file con restrizioni.
Come installare e utilizzare plocate
plocate è disponibile nei repository ufficiali di alcune distribuzioni Linux, tra cui Arch Linux / Manjaro e Debian (Bullseye e più recenti, così come i backport di Buster) / Ubuntu (21.04 e successivi). Puoi installarlo usando:
sudo pacman -S plocate
- Debian (Bullseye e versioni successive, nonché i backport di Buster) / Ubuntu (21.04 e versioni successive):
plocate find files command linesudo apt install plocate
Per costruirlo su altre distribuzioni Linux avrai bisogno di un compilatore C++ 17, Zstd (intestazioni di sviluppo) e Meson. Nel mio test su Fedora ho dovuto anche installare libatomic
per ottenere il programma da costruire. Facoltativamente, vorrai anche liburing
e un kernel che supporta io_uring
(Linux 5.1 o successivo) per le migliori prestazioni, soprattutto se non si utilizza un SSD. Un’altra dipendenza facoltativa è systemd, che può essere utilizzata per eseguire il timer di aggiornamento del database plocate integrato.
Per installare le dipendenze di compilazione di plocate su Fedora (incluso l’opzionale liburing
), utilizzo:
sudo dnf install libzstd-devel liburing-devel libatomic gcc-c++ meson
O per costruirlo su ad esempio Ubuntu 20.04 (nota che Ubuntu 20.04 non ha liburing
nei suoi repository, quindi plocate non utilizzerà tutta la sua potenza se stai usando un normale HDD), avrai bisogno di queste dipendenze:
sudo apt install libzstd-dev meson build-essential
Una volta installate le dipendenze di build, scarica ed estrai plocate e usa il terminale per navigare nella sua cartella. Ora puoi procedere alla compilazione e all’installazione di plocate sul tuo sistema:
meson obj
cd obj
ninja
sudo groupadd --system plocate
sudo ninja install
sudo systemctl enable plocate-updatedb.timer
Ora puoi iniziare a usare plocate. Prima di utilizzarlo per la prima volta, crea il suo database (indice dei file) utilizzando il seguente comando:
sudo updatedb
La prima volta che corri updatedb
, esegue la scansione dell’intero filesystem e potrebbe volerci un po’ di tempo. Le esecuzioni successive dovrebbero essere molto più veloci.
Ora usa plocate
come useresti tu locate
. Cerca un file usando plocate:
locate <MY_FILE.EXT>
Sostituzione MY_FILE.EXT
con il file che vuoi trovare.
Per ulteriori opzioni come ignora maiuscole/minuscole, ricerca regex, ecc., vedere la guida dello strumento e la pagina man.
Potrebbe interessarti: Come eliminare i file più vecchi o più recenti di N giorni utilizzando find (con esempi aggiuntivi)