Comando whereis in Linux: trovare binari, sorgenti e pagine di manuale

whereis cerca i file binari, i sorgenti e le pagine di manuale associati al nome di un programma. È utile per trovare più tipi di file correlati; per sapere cosa risolve la shell corrente, comprese funzioni e alias, servono invece strumenti come type o command -v.

Questa guida si riferisce al comando whereis di util-linux. Prima degli esempi controlla whereis --version, whereis --help e man whereis: il programma deve essere installato e le opzioni disponibili possono dipendere dalla versione. Una pagina di manuale o un sorgente non devono necessariamente essere presenti anche quando il programma è installato.

Whereis costruisce l’insieme delle directory da posizioni note e informazioni dell’ambiente, inclusi PATH per i binari e MANPATH per i manuali. Non visita ricorsivamente tutto il filesystem e non usa il database di locate. Le directory personalizzate possono mancare: controlla l’insieme effettivo o specifica le directory per il tipo di file desiderato.

Sintassi di base

whereis [OPTION]... NAME...

OPTION e NAME sono segnaposto. Di norma si passa il nome del programma, per esempio bash, non un percorso con cui limitare la ricerca. Le opzioni minuscole -b, -m e -s scelgono i tipi; le maiuscole -B, -M e -S cambiano le directory cercate per quei tipi.

Uso di base di whereis

Cercare i diversi file associati a un nome

Una ricerca senza restrizioni di tipo può riportare binari, manuali e sorgenti trovati. L’etichetta bash: è seguita dai percorsi disponibili: non aspettarti lo stesso elenco su ogni sistema. Una riga con la sola etichetta non contiene alcuna corrispondenza, anche se il comando whereis è stato eseguito correttamente.

whereis bash

Cercare solo i binari

-b seleziona le directory e le regole di confronto per i binari. Non cerca nel contenuto dei file, non avvia ssh e non certifica che ogni percorso trovato sia eseguibile dall’utente o che il programma funzioni. Per individuare il candidato esterno in PATH, confronta il risultato con which e gli strumenti di risoluzione della shell.

whereis -b ssh

Cercare soltanto i manuali

-m seleziona i manuali; alcuni sistemi possono riportare anche documentazione Info nelle posizioni previste. Cercare printf può trovare il manuale dell’utilità esterna, mentre la shell può usare il proprio comando interno. Dove disponibile, help printf in Bash descrive il comando interno e man printf apre la pagina di manuale; whereis ne individua soltanto i file.

whereis -m printf

Distinguere i percorsi dei binari da quelli dei manuali

L’esempio mostra una ricerca per ls. Il risultato dipende dalle directory accessibili e dai pacchetti installati: la compressione e la posizione dei manuali possono variare. L’ordine dell’elenco non identifica il programma che la shell sceglierebbe per primo.

whereis ls

Possibile output, con percorsi che possono cambiare secondo l’ambiente:

ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

In questo esempio /usr/bin/ls è il percorso del programma e ls.1.gz è una pagina di manuale compressa, non un secondo eseguibile. Per separare i tipi ripeti la ricerca con whereis -b ls e whereis -m ls. Per alias, funzioni e selezione nella shell corrente usa invece type ls o command -v ls; non assumere che quest’ultimo restituisca sempre un percorso di file.

Opzioni principali

Opzione Scopo
-b Cerca i nomi nelle posizioni dei binari, senza avviarli.
-m Cerca pagine di manuale e documentazione nelle posizioni previste.
-s Cerca sorgenti già presenti nelle directory considerate; non scarica codice.
-B DIRS -f Sostituisce le directory di ricerca dei binari. Aggiungi -b se vuoi cercare solo quel tipo.
-M DIRS -f Sostituisce le directory dei manuali; -m limita la ricerca a quel tipo.
-S DIRS -f Sostituisce le directory dei sorgenti; -s limita la ricerca a quel tipo.
-u Filtra le corrispondenze considerate insolite dall’implementazione; non equivale a un elenco affidabile di programmi mancanti.
-l Elenca le directory di ricerca effettive, anche dopo le opzioni che le modificano.

Esempi pratici

Controllare le directory effettive

Usa -l quando un file non compare o proviene da una posizione inattesa. Util-linux indica il tipo con etichette come bin:, man: e src:. Per controllare una sostituzione specifica puoi usare, per esempio, whereis -B /usr/local/bin -f -l. Questa è una lettura della configurazione effettiva, senza modificare PATH o installazioni.

whereis -l

Cercare binari in directory personalizzate

Per cercare soltanto binari in directory già esistenti, usa whereis -b -B /usr/local/bin /opt/tools/bin -f mytool. -B cambia l’elenco per i binari; senza -b, gli altri tipi restano selezionati. -f termina l’elenco delle directory e introduce il nome da cercare: non è un filtro sui file regolari.

La prova seguente prepara un file dimostrativo in una cartella nuova e cerca soltanto lì. Se whereis-demo esiste già, il blocco si ferma: scegli un nome nuovo. Su un sistema con util-linux whereis disponibile, il risultato atteso è mytool: seguito dal percorso completo di whereis-demo/bin/mytool. Il sottoprocesso mantiene locale il cambio di directory; il file rimane nella cartella dimostrativa e non viene eseguito.

(
  mkdir whereis-demo || exit 1
  cd whereis-demo || exit 1
  mkdir bin || exit 1
  printf '#!/bin/sh\nexit 0\n' > bin/mytool || exit 1
  chmod +x bin/mytool || exit 1
  whereis -b -B "$PWD/bin" -f mytool
)

Confrontare la shell con i file associati

Il primo comando interroga la shell corrente, il secondo cerca i file associati al nome python3. Il primo può non trovare il nome in PATH mentre il secondo trova documentazione, oppure può accadere il contrario. In un ambiente virtuale Python, un percorso restituito dalla shell può differire da quelli delle installazioni di sistema; un risultato vuoto non dimostra da solo che Python sia disinstallato.

command -v python3
whereis python3

whereis e i comandi correlati

Comando Ruolo principale Quando usarlo
whereis Ricerca in posizioni note e directory dell’ambiente Individuare binari, sorgenti e manuali associati al nome
which Ricerca di candidati eseguibili in PATH Individuare un programma esterno; il comportamento può dipendere dal wrapper
type Interpretazione di un nome nella shell Distinguere alias, funzioni, comandi interni e file
find Scansione di directory scelte esplicitamente Cercare nel filesystem corrente con test su nome, tipo, data o dimensione

Avvertenze importanti

Considerare i limiti dell’insieme cercato

I file fuori dalle directory considerate, o nelle directory che il processo non può leggere, possono mancare. Un’etichetta senza percorsi non è un controllo di installazione e il solo stato di uscita non garantisce che un nome sia stato trovato. Per diagnosticare l’assenza fai una ricerca ordinaria senza -u e leggi i percorsi e gli errori, anziché usare quel filtro come test di disponibilità.

Usare il nome senza confonderlo con la directory cercata

Util-linux elimina i componenti iniziali di un percorso passato come nome e applica regole proprie ai suffissi dei file associati. Scrivere un percorso completo come argomento non limita quindi la ricerca a quella directory. Passa il nome semplice e specifica le directory con -B, -M o -S. Per verificare un file esatto in una posizione precisa, usa un controllo su quel percorso o find.

Separare directory e nomi e rispettare l’ordine delle opzioni

Chiudi le liste di directory con -f e racchiudi fra apici o virgolette ogni percorso contenente spazi. Le restrizioni di tipo si applicano ai nomi successivi: whereis -bm ls tr -m gcc cerca binari e manuali per ls e tr, poi soltanto manuali per gcc. Anche le sostituzioni delle directory valgono per gli argomenti successivi: tieni separati i casi se l’ordine rende difficile leggere il comando.

FAQ

whereis cerca soltanto in PATH?

No. Util-linux parte da posizioni note e aggiunge directory pertinenti dell’ambiente, fra cui PATH e MANPATH. Puoi modificare separatamente gli insiemi per binari, manuali e sorgenti con -B, -M e -S.

Perché manca un'installazione personalizzata?

La directory può essere fuori dall’insieme cercato, non accessibile oppure non contenere il tipo selezionato. Controlla whereis -l, poi indica la directory corretta e usa il nome semplice. Non occorre creare un indice con updatedb.

Come posso vedere i percorsi di ricerca?

Con util-linux usa whereis -l. Le etichette distinguono binari, manuali e sorgenti; le directory effettive possono cambiare in base alla configurazione, all’ambiente e ai percorsi sostituiti con -B, -M o -S.

Come posso cercare in tutto il filesystem?

Per una scansione attuale usa find in una directory pertinente; per cercare nomi già indicizzati puoi usare locate e il suo database. Entrambi hanno limiti di accesso o aggiornamento: iniziare dalla directory interessata è più utile che scandire indiscriminatamente tutto il sistema.

Fonti e documentazione