Corso Linux / Cercare file e comandi con find, locate, which e whereis
Usa find per cercare voci nell'albero delle directory secondo condizioni e locate per interrogare rapidamente un indice di nomi già preparato. which e whereis aiutano a trovare file legati ai comandi, mentre in Bash type e command -v descrivono meglio come la shell corrente interpreta un nome, comprese funzioni e alias quando applicabili. Scegli lo strumento in base alla domanda che vuoi risolvere.
Cercare percorsi è diverso dal cercare righe nel contenuto: quest'ultimo caso è trattato nella lezione sulla ricerca e sul conteggio del testo, in inglese.
Cercare nell'albero corrente con find
find parte da un percorso e visita l'albero sottostante, applicando condizioni su nome, tipo, dimensione e altri attributi. La prova seguente presuppone Bash e GNU find, come utente normale. Se ~/linux-course-11-practice esiste già, scegli un altro nome e usalo nei primi due comandi.
Esegui una riga alla volta. Se il primo mkdir fallisce, fermati. Dopo cd, verifica con pwd che la posizione sia la nuova directory prima di creare drafts, archive e i file. Il solo percorso stampato non prova che mkdir sia riuscito; controlla ogni risultato prima di proseguire.
mkdir ~/linux-course-11-practice
cd ~/linux-course-11-practice
mkdir drafts archive
touch drafts/notes.txt drafts/todo.md archive/old.txt
In questa directory nuova i file creati con touch sono vuoti. Su un file già esistente, touch può modificarne i timestamp: per questo la preparazione non va eseguita in una cartella con dati precedenti.
Controlla la posizione e cerca i file regolari il cui nome termina in .txt. Le virgolette proteggono *.txt dall'espansione della shell, così il modello arriva a find. L'opzione GNU -maxdepth 2 limita la discesa: il punto iniziale . è al livello 0, le sue sottodirectory al livello 1 e i file al loro interno al livello 2.
pwd
find . -maxdepth 2 -type f -name '*.txt'
L'ordine può cambiare, ma devono comparire entrambi questi percorsi:
./drafts/notes.txt
./archive/old.txt
-type f seleziona file regolari e -name confronta il nome con il modello; GNU -iname consente un confronto senza distinzione tra maiuscole e minuscole. La prova cerca nomi, non contenuti. Un risultato non dimostra che tu possa leggere il file e la scansione non è un'istantanea immutabile: una voce può cambiare mentre cerchi.
Se manca un risultato, controlla percorso iniziale, profondità e maiuscole. Errori di permesso possono significare che una parte dell'albero non è stata esaminata. Non nascondere tali errori né passare automaticamente a sudo; per questa prova bastano le directory personali. I comandi mostrati non usano azioni di cancellazione.
Interrogare un indice di nomi con locate
locate consulta un database preparato in precedenza, invece di percorrere l'albero al momento della ricerca. Questo può accelerare una ricerca ampia, ma i file nuovi possono non essere ancora indicizzati e nomi rimossi possono restare nel database. Visibilità dei percorsi e controlli sui permessi dipendono anche dall'implementazione e dalla configurazione.
locate hosts
Tra i risultati può esserci /etc/hosts, insieme ad altri percorsi contenenti il testo cercato. Non aspettarti che il file appena creato nella prova sia subito presente nell'indice. Prima di usare un risultato, verifica con ls o con una ricerca mirata di find che il percorso esista ancora.
Se il programma o il database manca, controlla gli strumenti forniti dalla distribuzione e la procedura di aggiornamento. Esistono più implementazioni: GNU Findutils fornisce strumenti di indicizzazione, mentre sistemi attuali possono usare plocate con il proprio updatedb. Non considerare intercambiabili tutte le opzioni. Percorsi esclusi, frequenza di aggiornamento e permessi possono spiegare risultati assenti.
Trovare il percorso di un eseguibile
which cerca normalmente un eseguibile nelle directory elencate nella variabile d'ambiente PATH, cioè l'elenco dei percorsi di ricerca dei comandi. Il comando seguente può restituire, per esempio, /usr/bin/ls o /bin/ls; il percorso effettivo dipende dal sistema.
which ls
Le implementazioni di which differiscono. Non presumere che conoscano tutte le funzioni o gli alias che possono avere precedenza nella shell. Per esaminare la risoluzione del nome nella stessa sessione Bash, usa:
type -a ls
command -v ls
type -a può mostrare più interpretazioni: alias, funzioni, comandi incorporati ed eseguibili. command -v indica se e come il nome è risolvibile; il risultato non è necessariamente un percorso assoluto. Esegui la verifica nella shell in cui userai il comando: configurazioni e sessioni diverse possono dare risultati diversi. In particolare, negli script Bash gli alias normalmente non vengono espansi, salvo configurazione esplicita.
Se un nome non è trovato, controlla il messaggio e lo stato di uscita prima di usare il risultato in un altro comando. Queste verifiche descrivono la risoluzione del nome e non certificano l'affidabilità del programma trovato.
Cercare eseguibili e manuali con whereis
whereis cerca file binari, sorgenti e manuali associati a un nome di comando. whereis ls può mostrare un eseguibile e un percorso di manuale; non significa che ogni categoria sia installata. L'implementazione util-linux cerca in posizioni previste e nei percorsi rilevanti dell'ambiente, quindi i risultati variano con il sistema.
whereis ls
| Domanda | Strumento iniziale | Attenzione |
|---|---|---|
| Quali voci attuali soddisfano le condizioni? | find |
Ambito e permessi influiscono su tempi ed errori |
| Quali nomi sono registrati nell'indice? | locate |
Il database può essere datato |
| Dov'è un eseguibile nel PATH? | which |
È diverso dalla risoluzione completa della shell |
| Come interpreta il nome questa shell? | type -a, command -v |
Dipende dalla configurazione corrente |
| Dove sono eseguibile e manuali del comando? | whereis |
Posizioni e risultati dipendono dall'ambiente |
Un file chiamato ls trovato con find non è necessariamente quello eseguito digitando ls. Se la distinzione è rilevante, controlla type -a ls nella sessione interessata. Conserva i file della prova finché servono: cercarli non richiede di eliminarli.
Su Ubuntu 26.04, il pacchetto ufficiale plocate è disponibile in universe. Se locate manca e quel repository è disponibile nella tua macchina di prova, puoi installarlo con sudo apt install plocate e preparare l'indice con sudo updatedb. Controlla l'esito di entrambi prima di cercare; l'installazione e l'indicizzazione modificano il sistema e non sono necessarie per completare la parte su find.
Su Rocky Linux 9, interroga prima i repository abilitati con dnf provides '*/locate' e scegli il pacchetto effettivamente restituito. Se non c'è corrispondenza, verifica i repository invece di indovinare un nome. La documentazione ufficiale di DNF su provides spiega la ricerca del pacchetto che fornisce un file.
updatedb può scandire ampie parti del sistema: usa una macchina virtuale di esercizio e considera percorsi esclusi, autorizzazioni ed età del database. Un aggiornamento non rende locate un elenco in tempo reale di ogni file accessibile.
Documentazione ufficiale
Il manuale GNU di find descrive condizioni e profondità. I manuali di plocate e del relativo updatedb specificano ricerca e indicizzazione. Consulta il manuale GNU di Bash per type e command, e il manuale di whereis di util-linux per le posizioni cercate. Nella tua installazione controlla anche man o --help per le opzioni effettivamente disponibili.




