Ich war lange Zeit ein chronischer Googler, wobei doch die Antworten auf viele meiner Fragen bereits auf meinem Computer gespeichert sind. Heute trivialisieren Tools wie AI die Suche noch mehr, doch auch sie beruhen (unter anderem) auf Informationen aus den Manpages. Vor einiger Zeit fühlte ich das Bedürfnis, mir die Manpages genauer anzuschauen. Hoffentlich kann euch dieser Artikel sie ebenfalls etwas näher bringen (PS: cool-retro-term ist nicht mein Standard Terminal Emulator, das Bild sollte lediglich für Aufmerksamkeit sorgen).
Manpages
Die Manpages (englisch manual, Handbuch), aufrufbar mit dem Befehl man, sind eine Kollektion von Bedienungsanleitungen von Software auf Linux Systemen. man formatiert die gewünschte Seite und übergibt sie an einen Pager (standardmässig das Programm less, historisch auch more) für die Anzeige im Terminal. Ein benutzerdefiniertes Programm kann in der PAGER bzw. MANPAGER Umgebungsvariable definiert werden. ` kann z.B. ein Befehl, Gerät, Dateiname oder Name einer Bibliothek sein.man man` für eine detaillierte Beschreibung der Manpages.
Konventionelle Namen der einzelnen Abschnitte heissen: NAME, SYNOPSIS, CONFIGURATION, DESCRIPTION, OPTIONS, EXIT STATUS, RETURN VALUE, ERRORS, ENVIRONMENT, FILES, VERSIONS, STANDARDS, NOTES, BUGS, EXAMPLE, AUTHORS, und SEE ALSO.
Wichtig: Die Manpages sind ausgereift, stellen jedoch nur einen Teil der vollständigen Dokumentation dar. Sie eignen sich allen voran für die Dokumentation von Befehlen und Standarddateien/Bibliotheken. Viele Informationen sind in den Wikis der jeweiligen Distros bzw. Entwickler der Tools hinterlegt. Bsp.:
vim. Manpage erklärt die CLI Argumente, aber nicht die Bedienung vonvim.
Manpage-Syntaxkonvention der SYNOPSIS
Der Zweck der SYNOPSIS ist die formale Beschreibung der Aufrufsyntax eines Programms ohne semantische Erklärung. Sie zeigt ausschließlich Struktur und Argumentreihenfolge. Die Darstellungsnotation der SYNOPSIS in Manpages ist eine historisch gewachsene UNIX-Dokumentationskonvention, die von BSD, System V und später vom GNU Projekt übernommen und weitergeführt wurde. POSIX hat nur gewisse Elemente der Notation standardisiert.
Frühe UNIX Konvention war es, zuerst alle Optionen und erst im Anschluss die Positionsparameter anzugeben. Heute ist dies nicht mehr zwingend; moderne Tools akzeptieren oft eine flexible Reihenfolge.
Was sind Positionsparameter?: Ein Positionsparameter ist ein Parameter, dessen Bedeutung sich aus seiner bestimmten Position in der Argumentliste ergibt. Im Beispiel unten sind
FILEund[expression]Positionsparameter, da kein anderes syntaktisches Merkmal existiert, an dem ihre Bedeutung erkenntlich ist (im Gegensatz zu Optionen, die mit einem-eingeleitet werden).Technisch gesehen übergibt die Shell sowohl Positionsparameter als auch Optionen als Argumente in einer bestimmten Reihenfolge an das Programm (über
argv[]), konzeptionell unterscheidet man sie jedoch.
Aus man man:
fett: 1 zu 1 so einzutippen (oft der der Name des Befehls selbst)kursiv: Platzhalter für einen benutzerdefinierten Wert[-abc]: Ein oder alle Argumente innerhalb der Klammern sind Optional-a|-b: Optionen getrennt durch ein|dürfen nicht gleichzeitig verwendet werden.argument...: Argument ist wiederholbar[expression]...: Der gesamte Ausdruck ist wiederholbar(a | b): Gruppierung von Elementen (meine Ergänzung)
Die exakte Ausgabe kann je nach Ausgabegerät variieren. z.B. ist der von man verwendete Pager üblicherweise nicht in der Lage, kursiven Text im Terminal zu rendern, und stellt diesen unterstrichen oder in Farbe dar. Weitere Konvention ist, obligatorische Positionsparameter in Klammern, oder Benutzerdefinierte Werte, zusätzlich zum Unterstrich, in Grossbuchstaben zu setzen (`FILE`). **Wichtig**: im Rest der Manpage können auch unterstrichene Wörter vorkommen. Dies ist in manchen Fällen lediglich eine Hervorhebung, kann aber auch einen Link markieren dem mit gefolgt werden kann (mit neovim als Pager), Doppelklick mit der Maus funktioniert auch in den meisten Pagern.
# Beispiel SYNOPSIS
command (-a | -b) [-c ARGUMENT] [OPTION...] [--verbose | --quiet] FILE... [expression]
Konkret:
command: so einzutippen (in der Manpage fett dargestellt)(-a | -b):-aoder-bmuss vorhanden sein[-c ARGUMENT]: wahlweise Option-cmit Argument[OPTION...]: beliebige weitere Optionen, wobei in den meisten Programmen-xyz=-x -y -z(für Short Options ohne Argumente).[--verbose | --quiet]:--verboseoder--quietkann vorhanden seinFILE...: PositionsparameterFILEist ein benutzerdefinierter Wert der wiederholt werden kann. Hier der Pfad einer Datei.[expression]: optionaler Positionsparameter, hier ein Ausdruck.
Organisation
Die exakte Struktur ist nicht wirklich wichtig für die meisten Themen, da man in den meisten Fällen die geeignete Seite von selbst findet. Erst wenn sich ein Thema in mehreren Sektionen wiederfindet, muss sie spezifiziert werden. Beispiel: passwd ist ein Befehl sowie eine Konfigurationsdatei, weswegen eine Manpage in den Sektionen 1 und 5 gefunden werden kann. Gesucht wird in numerischer Reihenfolge, wobei die Sektionen 1 und 8 Vorrang haben (Befehle). Eine spezifische Sektion kann wie folgt angefragt werden:
man 5 passwd
# oder
man passwd.5
Generell bezeichnet der Ausdruck Programmers Manual die Sektionen 2-7. In den Manpage-Sektionen 2 und 3 enthält die SYNOPSIS die erforderlichen #include-Direktiven (Header) sowie die vollständige Funktionssignatur. Diese entspricht exakt der deklarativen C-Signatur der jeweiligen Schnittstelle. Dieser Punkt ist hauptsächlich für Entwickler interessant, denen wird das allerdings bereits bewusst sein.
Namen der Sektionen auf Englisch (aus dem Buch kopiert).
| Sektion | Inhalt |
|---|---|
| 1 | User-level commands and applications |
| 2 | System-level and kernel error codes |
| 3 | Library Calls |
| 4 | Device drivers and network protocols |
| 5 | Standard file formats |
| 6 | Games and demonstrations |
| 7 | Miscellaneous files and documents |
| 8 | System administration commands |
| 9 | Obscure Kernel specs and interfaces |
Mit apropos lässt sich nach Begriffen innerhalb des Abschnitts DESCRIPTION aller Manpages suchen. Der whatis Befehl listet alle vorhandenen Sektionen eines Befehls auf.
apropos printf # oder: man --apropos printf
whatis printf # oder: man --whatis printf
Die Installation (bzw. Deinstallation) von neuen Paketen fügt neue Datenbankeinträge in den Manpages hinzu, dies ist in den gängigen Distribution automatisiert. Falls das nicht der Fall ist, kann die Datenbank wie folgt aktualisiert werden:
sudo mandb
sudo makewhatis # Red Hat und FreeBSD
Interessantes und Tipps
- Es existieren alternative Pager. Neovim hat einen sehr guten eingebauten Pager. (Umgebungsvariable
MANPAGER='nvim +Man!'setzen). MitgOlässt sich ein Inhaltsverzeichnis öffnen. infoPaket beinhaltet detailliertere, navigierbare Beschreibungen für Befehle mit Beispielen, eine Art Tutorial.tldrPaket für kurze Zusammenfassungen häufig genutzter Optionen eines Befehls.- Nach exaktem Wort suchen (
/eingeben um Suche einzuleiten):\. - Für Konfigurationsdateien existieren oft auch Manpages,
man pacman.conf. Steht oft am Schluss vom Hauptdokument imSEE ALSOAbschnitt. - Interessant, es existieren auch allgemeinere Manpages:
man ascii,man units - Mit einem Auto-Completion-Plugin für die Shell (z. B.
zsh-completionsfürzsh) lassen sich auch Vorschläge für verfügbare Manpages anzeigen. - Für die POSIX konforme Manpage, ein
pan die Sektion anhängen:man 3p printfoderman printf.3p. Nützlich wenn ein portables Programm geschrieben wird. Manche Distros paketieren diese Manpages separat. - Firefox mit
@manKeyword sucht ->https://man.archlinux.org/search?q=%s&lang=en - (
pacman) Installierte Manpages eines Pakets anzeigen:pacman -Ql | grep man. - (
pacman) Herausfinden, welches Paket eine spezifische Manpage (hier aus der Sektion 2) besitzt bzw. installiert hat:pacman -Qo $(man -w 2 ).
Quellen:
`man man`
Evi Nemeth et al.: Unix and Linux System Administration Handbook

Huch, im Paragraph vor der Beispiel Synopsis ist mir ein kleiner Formatierungsfehler unterlaufen. Korrektur (Backslashes ignorieren falls sichtbar): ...Weitere Konvention ist, obligatorische Positionsparameter in \ Klammern... ...kann aber auch einen Link markieren dem mit \ (Ctrl+]) gefolgt werden kann...
Okay, ich musste feststellen, dass spitze Klammern nicht erlaubt sind und sich auch nicht mit Escape-Sequenzen darstellen lassen, sorry!
Obligatorische Positionsparameter können in spitzen Klammern stehen.
Ach Mensch, der gleiche Fehler im ersten Paragraph des Hauptteils sowie unter "Interessantes und Tipps" (ich habe hier spitze Klammern durch eckige Klammern ersetzt).
man [titel]formatiert die gewünschte Seite und übergibt sie an einen Pager...[titel]kann z.B. ein Befehl, Gerät, Dateiname oder Name einer Bibliothek sein...Nach exaktem Wort suchen (
/eingeben um Suche einzuleiten):\[WORT\].Hier auch (spitze durch eckige Klammern ersetzt). Bitte entschuldigt die separaten Kommentare.
(
pacman) Installierte Manpages eines Pakets anzeigen:pacman -Ql [pkgname] | grep man.(
pacman) Herausfinden, welches Paket eine spezifische Manpage (hier aus der Sektion 2) besitzt bzw. installiert hat:pacman -Qo $(man -w 2 [pkgname]).Manpages sind ein elementarer Bestandteil eines jeden UNIX & Linux Systems. Du hast wahrscheinlich recht, dass viele Benutzer und fast alle Newbies entweder Google oder neuerdings KI Systeme benutzen, um zum Ziel zu gelangen. Der Lerneffekt ist dann jedoch meist Null, was sehr schade ist.
Manpages befinden sich nicht nur auf dem eigenen Rechner, sondern lassen sich, meist bequemer, online im Netz nachschlagen:
Danke für die Ergänzung! Darauf sollte der drittletzte Punkt unter "Interessantes und Tipps" aufmerksam machen. So können Manpages bequem über den Browser aufgesucht werden, wobei die Manpages der genutzten Distro immer bevorzugt werden sollten.
> Der Lerneffekt ist dann jedoch meist Null, was sehr schade ist.
Naja, ob ich aus Suchmaschine oder Manpage rauskopiere … muss nicht unbedingt ein großer Unterschied sein. Aber natürlich sollte
man …der erste Reflex sein ;) Doch komplexere Probleme sind oft mit einer Web-Suche wesentlich schneller erschlagen (komplexerffmpeg-Befehl).Also die KI meines Vertrauens erzählt mir gerade das einige CLI Befehle wie rsnc, grep beide jeweils über 40 Optionen haben, tar mehr als 50 und find sogar mehr als 60 Optionen. Und du bringst jetzt diesen genialen Vergleich mit ffmpeg, dass über 200 !! Optionen (++ Filter) hat. Endlevel, Chapeau !! :-D
Kleine Korrektur: In Firefox gelangt man mit
!man BEGRIFFzu den manpages, nicht mit@man.Mhm ist wohl von Version zu Version unterschiedlich. Bei mir nutzt Firefox @ als Keyword um eine alternative Suchmaschine zu nutzen