Cosa significano i numeri in una pagina man?


474

Quindi, per esempio, quando scrivo man lsvedo LS(1). Ma se scrivo man apachectlvedo APACHECTL(8)e se man cdscrivo finisco con cd(n).

Mi chiedo quale sia il significato dei numeri tra parentesi, se ne hanno.




4
@PeterMortensen Ecco perché SuperUser e Unix / Linux e ServerFault e AskUbuntu e Apple devono essere uniti.
Chloe,

In una nota a export MANSECT=0p:1:2:3:3p:4:5:6:7:8:9:l:s:n
margine

Questo è un gigantesco fallimento della UX. La documentazione digitale non dovrebbe avere affatto numeri di sezione; dovrebbe avere nomi descrittivi e collegamenti ipertestuali. Non riesco a credere che siano riusciti a rendere la documentazione così confusa che questa domanda è stata vista 121000 volte.
iono,

Risposte:


497

Il numero corrisponde alla sezione del manuale da cui proviene la pagina; 1 è i comandi dell'utente, mentre 8 è roba da amministratore di sistema. La pagina man per man stesso ( man man) lo spiega ed elenca quelli standard:

MANUAL SECTIONS
    The standard sections of the manual include:

    1      User Commands
    2      System Calls
    3      C Library Functions
    4      Devices and Special Files
    5      File Formats and Conventions
    6      Games et. al.
    7      Miscellanea
    8      System Administration tools and Daemons

    Distributions customize the manual section to their specifics,
    which often include additional sections.

Esistono alcuni termini che hanno pagine diverse in sezioni diverse (ad es. printfCome appare un comando nella sezione 1, come stdlibappare una funzione nella sezione 3); in casi del genere puoi passare il numero di sezione manprima del nome della pagina per scegliere quale vuoi, oppure usare man -aper mostrare tutte le pagine corrispondenti in una riga:

$ man 1 printf
$ man 3 printf
$ man -a printf

Puoi dire in quali sezioni rientra un termine man -k(equivalente al aproposcomando). Farà anche corrispondenze di sottostringa (ad es. Mostrerà sprintfse si esegue man -k printf), quindi è necessario utilizzare ^termper limitarlo:

$ man -k '^printf'
printf               (1)  - format and print data
printf               (1p)  - write formatted output
printf               (3)  - formatted output conversion
printf               (3p)  - print formatted output
printf [builtins]    (1)  - bash built-in commands, see bash(1)

5
Questo certamente lo spiega. C'è un modo semplice per dire se ci sono più pagine man per un dato comando?
Wilduck,

2
@Wil Sì, modificato
Michael Mrozek

11
Nota che questi numeri di sezione sono per Linux. 1, 3 e 6 sono uguali in tutte le varianti unix AFAIK, ma le altre e le sezioni non a cifra singola possono differire. Di solito man X introdescrive ciò che è nella sezione X.
Gilles,

2
@KeithB: ho usato alcuni unices con 4,5,7,8 diversi. Digital Unix (OSF1) aveva, e Solaris ha ancora: formati di file in 4, misc in 5, dispositivi in ​​7. Solaris mette anche i comandi dell'amministratore in 1m. Penso che le chiamate di sistema in 2 siano universali, ma alcuni sistemi hanno anche alcune interfacce di libreria C in 2 (quando si suppone che siano involucri sottili attorno all'omonima scalinata).
Gilles,

4
Huh, che pensava che avresti bisogno di un manuale per usare un manuale ... Non l'ho mai eseguito man man... fino ad ora.
Matt Clark,

59

La storia di questi numeri di sezione risale al manuale originale del programmatore Unix di Thompson e Ritchie nel 1971.

Le sezioni originali erano

  1. comandi
  2. Chiamate di sistema
  3. Le subroutine
  4. File speciali
  5. Formati di file
  6. Programmi gestiti dall'utente
  7. miscellaneo

Altre cose degli anni '70, davvero. Pensavo fosse degli anni '80.
Rolf,

"Varie" significa principalmente "ampie informazioni su un intero sottosistema o funzionalità Unix generica piuttosto che un particolare endpoint API". Si veda ad esempio pipe(7), tcp(7)(e diverse altre pagine man di rete), pthreads(7), boot(7), regex(7), ecc C'è altra roba nella sezione 7, nonché, come ad esempio ascii(7)(tabella ASCII) e man(7)(come scrivere una pagina di manuale), ma le pagine le grandi docs sono di gran lunga le cose più utili nella sezione 7 della mia esperienza.
Kevin,

31

konqueror descrive anche sezioni non standard: (grazie a @ greg0ire per l'idea)

0     Header files
0p    Header files (POSIX)
1     Executable programs or shell commands
1p    Executable programs or shell commands (POSIX)
2     System calls (functions provided by the kernel)
3     Library calls (functions within program libraries)
3n    Network Functions
3p    Perl Modules
4     Special files (usually found in /dev)
5     File formats and conventions eg /etc/passwd
6     Games
7     Miscellaneous  (including  macro  packages and conventions), e.g. man(7), groff(7)
8     System administration commands (usually only for root)
9     Kernel routines
l     Local documentation
n     New manpages

21

Che cosa è dire già descritto, ma vuole anche aggiungere che ogni sezione ha particolare pagina di manuale con l'introduzione: intro. Ad esempio, vedere man 1 introo man 3 introe così via.


1
Non vedo questo sulla mia installazione di Fedora. Man X intro non è standard?
Beatgammit,

@tjameson Hai man-pagesinstallato il pacchetto?
php-coder

15

Dalla manmanpage:

The table below shows the section numbers of the manual followed by the 
types of pages they contain.

   1   Executable programs or shell commands
   2   System calls (functions provided by the kernel)
   3   Library calls (functions within program libraries)
   4   Special files (usually found in /dev)
   5   File formats and conventions eg /etc/passwd
   6   Games
   7   Miscellaneous  (including  macro  packages and conven‐
       tions), e.g. man(7), groff(7)
   8   System administration commands (usually only for root)
   9   Kernel routines [Non standard]

Quanto al perché sono separati così - c'è qualche sovrapposizione. Alcune manpage esistono in più di una sezione a seconda di cosa intendi.

Ad esempio, confronta man crontabcon man 5 crontab- è probabile che quest'ultimo sia quello che volevi cercare.


E cosa sono man1pe man3p?
Tyilo,

E dove dovrei posizionare le mie pagine man situate ~/man?
Tyilo

Sapevo che c'erano numeri diversi, ma non sapevo che ci fosse una rima. Grazie
user606723

1
1p è la versione standard posix del manuale. Se vuoi scrivere un codice portatile, dovresti usare solo le pagine man di Xp. Se l'implementazione non è conforme a posix, le pagine man X e Xp potrebbero differire.
andcoz,

@Tyilo vedi la mia risposta
Babken Vardanyan il

8

Questi sono numeri di sezione. Basta digitare man mano aprire konqueror e digitare man: // man e vedrai quali sono queste sezioni.


7

Spesso si fa riferimento a una pagina man tramite il suffisso con la sezione racchiusa tra parentesi, ad esempio:

read(2)

Questo stile ha due vantaggi principali:

  • è immediatamente chiaro che si fa riferimento a una pagina man - cioè è possibile scrivere qualcosa come 'cf. leggi (3) "anziché" cfr. la pagina man della sezione 3 di lettura '
  • se più sezioni contengono pagine man con lo stesso nome, specificare la sezione è più preciso

Le pagine man sono organizzate in sezioni, ad es. La sezione 1 include tutte le pagine man dei comandi utente, la sezione 2 tutte le pagine man per le chiamate di sistema, la sezione 3 è per le funzioni della libreria ecc.

Sulla riga di comando, se non si specifica esplicitamente la sezione, si ottiene la prima pagina man corrispondente, nell'ordine di attraversamento della sezione predefinita, ad esempio:

$ man read

viene visualizzato BASH_BUILTINS(1)su Fedora. Dove

$ man 2 read

visualizza la pagina man per la read()chiamata di sistema.

Si noti che la specifica di posizione della sezione non è portatile - ad es. Su Solaris la si specifica in questo modo:

$ man -s 2 read

Di solito, man manelenca anche alcune delle sezioni disponibili. Ma non necessariamente tutto. Per elencare tutte le sezioni disponibili è possibile elencare le sottodirectory di tutte le directory elencate nel percorso man predefinito o nella variabile d'ambiente $MANPATH. Ad esempio su un sistema Fedora 23 con alcuni pacchetti di sviluppo installati /usr/share/manha le seguenti sottodirectory:

cs  es  id  man0p  man2   man3x  man5x  man7x  man9x  pt_BR  sk  zh_CN
da  fr  it  man1   man2x  man4   man6   man8   mann   pt_PT  sv  zh_TW
de  hr  ja  man1p  man3   man4x  man6x  man8x  pl     ro     tr
en  hu  ko  man1x  man3p  man5   man7   man9   pt     ru     zh

Le directory con il manprefisso rappresentano ciascuna sezione, mentre le altre contengono sezioni tradotte. Pertanto, per ottenere un elenco di sezioni non vuote è possibile emettere un comando come questo:

$ find /usr/share/man -type f  | sed 's@^.*/man\(..*\)/.*$@\1@' \
    | sort -u | column
0p  1p  3   4   6   8
1   2   3p  5   7

(le sezioni che terminano con psono pagine man POSIX)

Per visualizzare una pagina man in un'altra lingua (se disponibile) è possibile impostare una variabile d'ambiente relativa alla lingua, ad esempio:

$ LC_MESSAGES=de_DE man read

Inoltre, ogni sezione dovrebbe avere una pagina man introduttiva denominata intro, ad esempio visualizzabile tramite:

$ man 2 intro

4

Le definizioni per SVr4 sono:

1 User Commands
2 System Calls
3 library Functions
4 File Formats
5 Standards, Environment and Macros (e.g. man(5))
6 Games and Demos
7 Device and Network Interfaces, Special Files
8 Maintenance Procedures
9 Kernel and Driver entry points and structures

Questa è la numerazione effettiva per un UNIX "genetico". POSIX non definisce i numeri.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.