Comando Linux Locate per principianti (8 esempi)

Mentre find è senza dubbio una delle più popolari e potenti utilità a riga di comando per la ricerca di file in Linux, non è abbastanza veloce per situazioni in cui si ha bisogno di risultati istantanei. Se vuoi cercare un file sul tuo sistema attraverso la riga di comando, e la velocità è la priorità assoluta, allora c’è un altro comando che puoi usare: Locate.

In questo tutorial, discuteremo il comando locate usando esempi facili da capire. Si prega di notare che tutte le istruzioni/esempi menzionati qui sono stati testati su Ubuntu 16.04 LTS, e la versione di locate che abbiamo usato è 0.26.

Come usare il comando locate in Linux

Il comando locate è molto facile da usare. Tutto quello che devi fare è passargli il nome del file che vuoi cercare.

locate 

Per esempio, se voglio cercare tutti i nomi di file che hanno la stringa ‘dir2’, allora posso farlo usando locate nel seguente modo:

Nota: Il comando ‘locate dir2’ (senza asterischi) andrà bene anche perché locate sostituisce implicitamente il nome che passi (diciamo NOME) con *NOME*.

Come funziona il comando locate, o perché è così veloce

La ragione per cui locate è così veloce è che non legge il file system per il nome del file o della directory cercato. In realtà fa riferimento ad un database (preparato dal comando updatedb) per trovare ciò che l’utente sta cercando e, basandosi su questa ricerca, produce il suo output.

Mentre questo è un buon approccio, ha la sua parte di svantaggi. Il problema principale è che dopo ogni nuovo file o directory creato sul sistema, è necessario aggiornare il database dello strumento per farlo funzionare correttamente. Altrimenti, il comando non sarà in grado di trovare file/directory creati dopo l’ultimo aggiornamento del database.

Per esempio, se provo a trovare file con nomi contenenti la stringa ‘tosearch’ nella directory ‘Downloads’ del mio sistema, il comando find produce un risultato nell’output:

Ma quando provo ad eseguire la stessa ricerca usando il comando locate, non produce alcun output.

Questo significa che il database in cui cerca locate non è stato aggiornato dopo la creazione del file sul sistema. Quindi, aggiorniamo il database, cosa che può essere fatta usando il comando updatedb. Ecco come fare:

sudo updatedb

E ora, quando eseguo di nuovo lo stesso comando locate, mostra i file nell’output:

Similmente, dopo che un file o una directory sono stati rimossi, è necessario assicurarsi che il database locate sia stato aggiornato, altrimenti il comando continuerà a mostrare il file nell’output durante la ricerca.

Come fare in modo che locate stampi il numero o il conteggio delle voci corrispondenti nell’output

Come abbiamo visto, il comando locate produce in output il nome dei file corrispondenti insieme ai loro percorsi completi o assoluti. Ma se vuoi, puoi fare in modo che lo strumento sopprima tutte queste informazioni e stampi solo il numero o il conteggio delle voci corrispondenti. Questo può essere fatto usando l’opzione a riga di comando -c.

Come forzare locate a stampare solo le voci che corrispondono a file esistenti

Come abbiamo già discusso in precedenza in questo articolo, se un file viene rimosso dal sistema, finché non si aggiorna nuovamente il database di locate, il comando continuerà a mostrare quel nome di file in output. Per questo caso specifico, tuttavia, puoi saltare l’aggiornamento del database e avere ancora risultati corretti in output usando l’opzione -e della linea di comando.

Per esempio, ho rimosso il file ‘filetosearch.txt’ dal mio sistema. Questo è stato confermato dal comando find, che non era più in grado di cercare il file:

Ma quando ho eseguito la stessa operazione usando locate, mostrava ancora il file nell’output:

E sappiamo perché – perché il database di locate non è stato aggiornato dopo la cancellazione del file. Tuttavia, usando l’opzione -e ha funzionato:

Ecco cosa dice la pagina man di locate su questa opzione: “Stampa solo le voci che si riferiscono ai file esistenti nel momento in cui locate viene eseguito.”

Come fare in modo che locate ignori le distinzioni tra maiuscole e minuscole

Di default, l’operazione di ricerca che il comando locate esegue è sensibile alle maiuscole. Ma puoi forzare lo strumento a ignorare le distinzioni tra maiuscole e minuscole usando l’opzione -i della linea di comando.

Per esempio, ho due file sul mio sistema, chiamati ‘newfiletosearch.txt’ e ‘NEWFILETOSEARCH.txt’. Quindi, come potete vedere, i nomi dei file sono gli stessi, solo che i loro casi sono diversi. Se chiedete a locate di cercare, diciamo, “*tosearch*”, allora mostrerà solo il nome minuscolo nel suo output:

Ma usando l’opzione a riga di comando -i si forza il comando a ignorare il caso, ed entrambi i nomi dei file vengono prodotti nell’output:

Come separare le voci dell’output con ASCII NUL

Di default, le voci dell’output che il comando locate produce sono separate usando il carattere newline (\n). Ma se vuoi, puoi cambiare il separatore e avere l’ASCII NUL invece di un newline. Questo può essere fatto usando l’opzione -0 della linea di comando.

Per esempio, ho eseguito lo stesso comando che abbiamo usato nell’ultima sezione sopra, ma ho aggiunto l’opzione -0 della linea di comando:

Così puoi vedere che il separatore newline non è più lì – è stato sostituito da NUL.

Come visualizzare le informazioni sul database di locate

Nel caso tu voglia sapere quale database sta usando locate, così come altre statistiche sul database, usa l’opzione a riga di comando -S.

Come cercare un nome di file esatto usando locate

Di default, quando cerchi un nome di file usando locate, il nome che passi – diciamo NOME – viene implicitamente sostituito da *NOME*. Per esempio, se cerco un nome di file ‘testfile’, allora tutti i nomi che corrispondono a *testfile* sono prodotti nell’output:

Ma se il requisito è cercare file con nomi che corrispondono esattamente a ‘testfile’? Beh, in questo caso, dovrete usare le espressioni regolari, che possono essere abilitate usando l’opzione -r della riga di comando. Quindi, ecco come puoi cercare solo ‘testfile’ usando le espressioni regolari:

locate -r /testfile$

Se sei nuovo alle espressioni regolari, vai qui.

Conclusione

Locate offre molte altre opzioni, ma quelle di cui abbiamo parlato qui dovrebbero essere sufficienti per darti un’idea di base sull’utilità a riga di comando, e per farti iniziare. Vi consigliamo di provare prima tutte le opzioni qui descritte sulla vostra macchina Linux, e poi passare ad altre che potete trovare nella pagina man dello strumento.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.