Comando whatis in Linux: leggere descrizioni e sezioni dei manuali

whatis mostra una breve descrizione delle pagine di manuale il cui nome corrisponde a quello cercato. Usatelo quando conoscete già il nome di un comando e volete ricordarne la funzione o vedere in quali sezioni è documentato.

Questa guida riguarda man-db, l’insieme di strumenti per consultare i manuali usato da molte distribuzioni Linux. whatis cerca per impostazione predefinita il nome esatto; anche man -f offre la descrizione breve. Per cercare invece parole contenute nella descrizione, usate apropos. Potete poi aprire la pagina completa con il comando man.

Che cos’è il comando whatis?

La sezione NAME contiene il nome della pagina e una breve descrizione. whatis consulta il database indicizzato di man-db e mostra le descrizioni associate ai nomi corrispondenti, senza aprire tutto il manuale.

La descrizione serve a riconoscere rapidamente una funzione. Non indica quale eseguibile verrà avviato dalla shell: alias, funzioni e comandi builtin possono avere lo stesso nome di un programma documentato.

Sintassi di base e lettura dell'output

whatis [option] name...

[option] rappresenta opzioni facoltative e name... uno o più nomi: sostituite questi segnaposto senza digitare le parentesi o i puntini.

Per leggere la descrizione di ls, indicate il suo nome:

whatis ls

Un risultato può avere questo formato. È un esempio illustrativo con descrizione inglese, non un output garantito su ogni sistema:

ls (1)               - list directory contents

ls è il nome della pagina, (1) è la sezione e il testo dopo il trattino ne riassume la funzione. Lingua, descrizione e disponibilità dipendono dai manuali installati. Per leggere sintassi e opzioni, aprite la pagina completa; dal pager abituale si esce con q.

man 1 ls

Controllare più nomi contemporaneamente

Passate più nomi come argomenti separati per ottenere le relative descrizioni:

whatis ls cp mv rm

È un modo rapido per confrontare comandi noti. Un’esecuzione con più nomi può però stampare risultati anche se alcune pagine mancano: non considerate la presenza di output come prova che ogni nome sia stato trovato. In uno script che deve verificare ciascuna pagina, cercate un nome alla volta e controllatene lo stato, come nell’esempio più avanti.

Quando lo stesso nome appare in più sezioni

Un nome può appartenere a pagine di sezioni diverse, producendo più righe. Per esempio, passwd può identificare sia il comando per gestire la password sia il formato del file degli account, se entrambi i manuali sono installati.

whatis passwd

Se compaiono passwd(1) e passwd(5), scegliete la pagina specificando la sezione:

man 1 passwd
man 5 passwd

Il valore tra parentesi è una sezione del manuale, non la versione del programma. La sezione 1 riguarda i comandi per utenti, la 8 quelli di amministrazione e la 5 i formati dei file.

Cercare nomi con espressioni regolari e caratteri jolly

Ricerca con espressioni regolari: -r

-r, o --regex, interpreta il termine come espressione regolare e cerca una corrispondenza anche in una parte del nome della pagina, non nella sua descrizione.

whatis -r '^ssh'
whatis --regex 'printf$'

Il primo esempio cerca nomi che iniziano con ssh; il secondo nomi che terminano con printf. Gli apici impediscono alla shell di interpretare prima i caratteri speciali, ma non disattivano l’espressione regolare elaborata da whatis.

Ricerca con caratteri jolly: -w

-w, o --wildcard, usa pattern con i caratteri jolly della shell. Il pattern deve corrispondere all’intero nome della pagina: ssh* seleziona nomi che iniziano con ssh, mentre *printf* include quelli che contengono printf.

whatis -w 'ssh*'
whatis --wildcard '*printf*'

Mantenete gli apici: senza questa protezione, la shell potrebbe espandere * nei nomi dei file della directory corrente prima di eseguire whatis. Le modalità -r e -w possono essere più lente della ricerca normale nell’indice.

Limitare la ricerca alle sezioni

-s, o --sections, limita la ricerca alle sezioni richieste. Le prime due righe separano il comando passwd dal formato del file; l’ultima cerca printf nelle sezioni 2 e 3, mostrando soltanto le corrispondenze installate.

whatis -s 1 passwd
whatis -s 5 passwd
whatis --sections=2,3 printf
Sezione Contenuto principale
1 Comandi e programmi per gli utenti
2 Chiamate di sistema del kernel
3 Funzioni delle librerie
5 Formati di file e file di configurazione
8 Comandi di amministrazione del sistema

In man-db una sezione semplice come 3 include anche sottosezioni come 3perl e 3x. Un valore completo, per esempio 3perl, limita invece la ricerca a quella sottosezione.

Opzioni utili di whatis

Opzione Descrizione
-r, --regex Cerca una corrispondenza dell’espressione regolare anche in una parte del nome.
-w, --wildcard Cerca nomi completi tramite pattern con caratteri jolly della shell.
-s list, --sections=list Limita i risultati alle sezioni indicate, separate da virgole o due punti.
-l, --long Evita il troncamento alla larghezza del terminale, senza cambiare i criteri di ricerca.
-M path, --manpath=path Sceglie gerarchie alternative separate da due punti e prevale su MANPATH.
-L locale, --locale=locale Imposta la locale della ricerca; i messaggi iniziali di aiuto mantengono quella originale.

Relazione tra whatis e man -f

Con man-db, man -f permette di trovare la descrizione breve di un nome, in modo analogo a whatis:

whatis printf
man -f printf

Scegliete la forma che ricordate meglio. In entrambi i casi ottenete una descrizione breve; per leggere il manuale completo usate man NOME, eventualmente precedendo il nome con la sezione.

Differenze tra whatis, apropos e type

Comando Domanda a cui risponde
whatis ls Cosa descrive la pagina del manuale con questo nome?
apropos copy Quali pagine del manuale sono correlate a questo argomento?
type ls Come risolve questo nome la shell corrente?
command -v ls Questo nome è disponibile nella shell e in quale forma?

Un risultato di whatis non dimostra che un eseguibile con quel nome sia nel PATH corrente. Vale anche il contrario: un programma può essere disponibile senza la relativa pagina di manuale installata.

Risoluzione dei problemi quando non ci sono risultati di ricerca

Verificare il nome della pagina e lo stato dell'installazione

Controllate di avere usato il nome della pagina, non una funzione descritta al suo interno. Nell’esempio, apropos cerca manuali sull’archiviazione, command -v controlla come la shell risolve tar e whatis ne cerca la descrizione. I tre risultati rispondono a domande diverse.

apropos archive
command -v tar
whatis tar

Controllare e aggiornare l’indice

Se le pagine pertinenti sono installate ma non vengono trovate dopo una nuova installazione, l’indice potrebbe essere assente o non aggiornato. Un amministratore può crearlo o aggiornarlo con:

sudo mandb

mandb scrive nell’indice dei manuali di sistema e può richiedere privilegi amministrativi. Molte distribuzioni lo avviano automaticamente durante l’installazione dei pacchetti o con attività pianificate: non serve eseguirlo ripetutamente senza motivo. Un aggiornamento non installa manuali mancanti; se non avete i permessi necessari, controllate prima percorsi e impostazioni della distribuzione.

Controllare la locale e MANPATH

locale
manpath
printf '%s\n' "$MANPATH"

locale mostra le impostazioni linguistiche; manpath mostra i percorsi calcolati per i manuali, mentre printf legge soltanto la variabile MANPATH. Se questa è vuota o non impostata, man-db può ricavare i percorsi dal PATH: un valore vuoto non significa assenza di manuali. Un valore personalizzato può invece escludere gerarchie utili. Le descrizioni tradotte devono essere installate perché possano comparire nella lingua desiderata.

Controllare la documentazione con uno script Bash

Per un controllo automatico usate lo stato di uscita, evitando di analizzare descrizioni che cambiano con lingua e versione. In man-db 0 indica successo, 1 un errore d’uso, sintassi o configurazione, 2 un errore operativo e 16 l’assenza di corrispondenze. Altre implementazioni possono differire: consultate man whatis sul sistema interessato.

Salvate il codice completo in verifica-manuale.sh. Su un sistema con Bash, man-db e i manuali installati, eseguite bash verifica-manuale.sh ls, passando un solo nome non vuoto. Lo script conserva i messaggi diagnostici di whatis e il suo stato di uscita.

if [ "$#" -ne 1 ] || [ -z "$1" ]; then
  printf '%s\n' 'Uso: bash verifica-manuale.sh NOME' >&2
  exit 2
fi

if whatis "$1" >/dev/null; then
  printf '%s\n' 'Descrizione del manuale trovata.'
  exit 0
else
  status=$?
  if [ "$status" -eq 16 ]; then
    printf '%s\n' 'Nessuna descrizione corrispondente.' >&2
  else
    printf 'Errore nella ricerca: stato=%d\n' "$status" >&2
  fi
  exit "$status"
fi

Se la descrizione esiste, vedrete il messaggio di successo con stato 0. In assenza di corrispondenze, il messaggio andrà allo standard error e lo stato sarà 16. Subito dopo lo script, echo "$?" mostra il valore restituito. Il controllo degli argomenti dello script usa anch’esso lo stato 2. Questi esiti riguardano la documentazione, non la disponibilità dell’eseguibile.

Domande frequenti

whatis mostra il percorso effettivo di un comando?

No. Mostra nomi e descrizioni delle pagine di manuale. Per sapere come la shell risolve un comando, usate type o command -v; il risultato può essere anche un alias, una funzione o un builtin.

Come posso cercare usando parole incluse nella descrizione?

Usate apropos PAROLA_CHIAVE oppure man -k PAROLA_CHIAVE. whatis è adatto quando conoscete il nome della pagina; anche con -r o -w cerca nei nomi, non nel testo delle descrizioni.

Perché lo stesso nome viene stampato su più righe?

Possono essere installate pagine omonime in sezioni diverse. Controllate il numero tra parentesi e aprite quella desiderata con man SEZIONE NOME, ad esempio man 5 passwd per il formato del file.

Scegliere lo strumento adatto

Usate whatis NOME per riconoscere una pagina già nota e scegliere la sezione corretta prima di aprirla con man. Se non compare una voce attesa, verificate nome, documentazione installata, percorsi e indice.

Per una ricerca per argomento passate ad apropos. Per verificare ciò che la shell eseguirà, scegliete type o command -v: la disponibilità di un programma e quella della sua documentazione vanno controllate separatamente.

Documentazione di riferimento