# Man (Unix)

man è un comando di cui la maggior parte dei sistemi operativi Unix e Unix-like dispone, per visualizzare le cosiddette man pages (abbreviazione di "manual pages") ovvero le pagine di manuale, che rappresenta un'ampia documentazione in linea utilizzata dalla quasi totalità delle distribuzioni GNU/Linux.

## Storia

Lo UNIX Programmer's Manual ("Manuale Unix per Programmatori") fu pubblicato per la prima volta il 3 novembre 1971. Comunque, le pagine di manuale non furono disponibili in linea fino alla settima edizione di UNIX nel 1979. A quel tempo, la disponibilità della documentazione in linea attraverso il sistema delle pagine man fu considerato come un grande passo avanti. Oggigiorno, virtualmente ogni applicazione Unix a riga di comando è corredata dalla propria pagina di man, e la loro assenza è generalmente percepita come indice di bassa qualità del software. Alcuni progetti, come Debian, si preoccupano anche di scrivere pagine man per quei programmi e comandi che ne sono privi.

## Caratteristiche

Ogni pagina man è un documento esplicativo di un comando, di una funzione o di un formato di file, o altro ancora, che descrive in maniera sintetica l'argomento e può contenere riferimenti ad altre pagine.
Le varie pagine man sono raggruppate in sezioni omogenee per tipo di argomento trattato (ad esempio vi è una sezione per i comandi utente, una per le chiamate di sistema, una per i formati dei file di configurazione, ed altre ancora).

## Localizzazione

Le pagine man sono tipicamente disponibili in lingua inglese, anche se per alcuni sistemi sono disponibili delle traduzioni.

## Sintassi

Per accedere ad una pagina del manuale si può utilizzare in una shell testuale il comando
ad esempio "man ftp".
Tradizionalmente il riferimento ad una pagina man è espresso usando la notazione "nome_pagina(sezione)", per esempio ftp(1) o socket(2).
Lo stesso nome di pagina man può apparire in più di una sezione del manuale: questo succede quando il nome di una chiamata di sistema, un comando utente o un macro package hanno lo stesso nome e sono dunque in conflitto tra loro. Due esempi sono man(1) e man(7), oppure exit(1) ed exit(3).
La sintassi per accedere alle pagine man di una sezione del manuale che non sia quella predefinita varia tra le differenti implementazioni di man: nella gran parte dei sistemi Unix e Unix-like, inclusi Linux ed i vari sistemi BSD, si usa indicare la sezione prima del nome della pagina. Ad esempio la sintassi per leggere la pagina relativa a printf(3) è:
Esiste anche una pagina relativa al comando man, visibile tramite il comando man man.

## Le sezioni del manuale

L'insieme delle pagine man è solitamente organizzato in otto sezioni numerate da 1 a 8. Ad esempio, su Unix BSD e Linux:
| Sezione | Descrizione |
| 1 | Comandi generali |
| 2 | Chiamate di sistema |
| 3 | Funzioni della libreria standard del C |
| 4 | File speciali (tipicamente i dispositivi a blocchi ed i dispositivi a caratteri che si trovano nella directory /dev) e driver |
| 5 | Formato di file e convenzioni |
| 6 | Giochi e screensaver |
| 7 | Miscellanea |
| 8 | Amministrazione del sistema comandi e demoni |
Lo UNIX System V utilizza uno schema di numerazione simile, eccetto che per la sezione 4, che è per i formati di file, la sezione 5, che contiene i miscellanea, e la sezione 7, che è per i file speciali.
In alcuni sistemi sono inoltre disponibili alcune delle seguenti sezioni:
| Sezione | Descrizione |
| 0 | Header file della libreria standard del C |
| 9 | Routine del Kernel |
| n | Comandi e parole chiave del linguaggio Tcl/Tk |
| x | Il sistema X Window |
Le sezioni sono ulteriormente suddivise in sottosezioni usando un suffisso di una lettera, come ad esempio la sottosezione 3C per le chiamate di libreria C e la sottosezione 3M per la libreria matematica. Una conseguenza di ciò è che le pagine della sezione 8 (per i comandi di amministrazione del sistema) talvolta rimandano alla sottosezione 1M della sezione dei comandi generali.
Altri suffissi assumono un significato generale tra le sezioni:
| Sottosezione | Descrizione |
| p | specifiche POSIX |
| x | documentazione per il sistema X Window |

## Layout

Tutte le pagine di manuale seguono un layout comune, che è ottimizzato per la presentazione su semplice testo in ASCII - possibilmente senza alcuna forma di evidenziazione o controllo dei font. Le seguenti intestazioni delle sezioni sono quasi sempre presenti e sono sempre in questo ordine:
* NAME - Il nome del comando o della funzione, seguito da una breve descrizione su una riga di che cosa fa il comando.
* SYNOPSIS - Nel caso di un comando fornisce una descrizione di come eseguirlo e di quali opzioni si possono specificare. Per le funzioni di programmazione vi è una lista dei parametri richiesti e in quale header file esse sono definite. Per gli utenti esperti ciò può costituire tutta la documentazione di cui essi necessitano.
* DESCRIPTION - Una descrizione testuale del funzionamento del comando o della funzione.
* EXAMPLES - Qualche esempio di uso più comune
* SEE ALSO - Una lista di comandi o funzioni simili o ad essi correlati.
Possono essere presenti anche altre sezioni, ma non sono ben standardizzate. Esempi comuni sono: OPTIONS, EXIT STATUS, ENVIRONMENT, KNOWN BUGS, FILES, AUTHOR, REPORTING BUGS e COPYRIGHT.

## Formato

Il formato usato per scrivere una pagina man è quello del sistema troff, con una struttura di tipo macro package (orientata all'apparenza) oppure alternativamente mdoc (orientata alla semantica). Ciò rende possibile ottenere da una pagina delle versioni PostScript o PDF, o vari altri formati ancora, sia per la visualizzazione che per la stampa (sebbene la maggior parte degli utenti preferisca ancora l'interfaccia testuale per la rapidità di consultazione).

## Alternative

Pur essendo state realizzate nel tempo delle alternative al sistema delle pagine man, poche di esse hanno riscosso una popolarità comparabile, con la possibile eccezione del sistema info del progetto GNU, che è un primo sistema di ipertesto con il quale è realizzata la documentazione ufficiale del progetto.
Nonostante la popolarità delle pagine man, il fatto di prevedere una pagina individuale per ogni applicazione, unitamente ad altre pecche dovute anche allo sforzo di mantenere semplice il sistema di gestione, hanno motivato lo sviluppo di sistemi di documentazione alternativi, uno dei quali è ad esempio il suddetto sistema info.
Ad oggi la maggior parte delle applicazioni Unix dotate di GUI, ed in particolare quelle realizzate per le shell grafiche GNOME e KDE, prevedono una documentazione per l'utente finale in HTML o altri sistemi ipertestuali, e possono avviare automaticamente i visualizzatori necessari per poterla consultare.