groff

Aus LinuxUser 12/2004

groff

Neue Manpages braucht das Land!

Wie ging gleich nochmal…? Guter Rat ist nicht immer teuer – ein Blick in Manpages lohnt sich fast immer. Wie diese entstehen und mit welchem Kommando Sie die Handbuchseiten in andere Formate konvertieren, zeigt diese “Zu Befehl”-Folge.

Zu Befehl

Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.

Eine gute Dokumentation ist fast so wichtig wie das Programm. Auch für kleine selbstgestrickte Skripte ist es sinnvoll, die wichtigsten Funktionen strukturiert aufzuschreiben, damit man sich später noch an die Features erinnert. Auf Linux-Systemen bietet es sich an, das vorhandene Dokumentationssystem zu nutzen: In Manpages finden Sie zu den meisten Befehlen Erklärungen der Funktionsweise, möglicher Optionen und manchmal auch Anwendungsbeispiele oder Hinweise auf verwandte Programme.

Manpages haben den Vorteil, dass man sie nicht nur im Terminal-Fenster lesen, sondern ebenso schnell und einfach in andere Formate wie HTML, PostScript oder PDF konvertieren kann. Traditionell werden die Handbuchseiten mit dem Textformatierungs-Tool groff erstellt. Eine erste Version dieses Programm gab es schon auf ganz alten Unix-Systemen unter dem Namen roff (= “run off”). Spätere Erweiterungen des Dokumentenformatierers waren nroff und troff; groff ist die GNU-Version, die auch auf aktuellen Linux-Systemen zum Einsatz kommt. Dieser Artikel zeigt, wie Sie mit groff eine Manpage schreiben und diese in verschiedene Formate umwandeln.

Ein “man” für alle Fälle

Sämtliche Manpages eines Linux-Systems liegen unterhalb des Verzeichnisses /usr/share/man – hier liegen u. a. übersetzte Handbuchseiten und die Unterverzeichnisse man1 bis man9. Die Ziffer verrät den thematischen Bereich, dem die Manpage zugeordnet ist: So liegen in Abschnitt 1 beispielsweise Beschreibungen zu Benutzerkommandos, in 5 Manpages, welche die Formate wichtiger Dateien erklären, und 8 bezieht sich auf Kommandos für den Systemverwalter. Eine gute Übersicht und stichwortartige Erklärungen der einzelnen Abteilungen zeigt das KDE-Hilfezentrum im Bereich Linux-Dokumentation / Man-Pages (Abbildung 1).

Abbildung 1: Manpages nach Abteilungen geordnet gibt's auch im KDE-Hilfezentrum.

Abbildung 1: Manpages nach Abteilungen geordnet gibt’s auch im KDE-Hilfezentrum.

Normalerweise muss man die Sektion beim Aufruf des man-Kommandos nicht mit angeben – nur, wenn es mehrere gleichnamige Manpages in verschiedenen Abteilungen gibt, müssen Sie genau definieren, welche Handbuchseite Sie meinen. Um beispielsweise die Manpage des Benutzerkommandos printf zu lesen, tippen Sie am Prompt

man 1 printf

Wer hingegen die C-Library-Funktion aus Abteilung 3 meint, tippt stattdessen:

man 3 printf

Ob es mehrere Manpages gibt, können Sie übrigens schnell über KDEs Konqueror herausfinden: Tippen Sie in die Adresszeile einfach man: gefolgt von dem Kommando, das Sie nachschlagen wollen. Gibt es nur eine Manpage, zeigt Konqueror diese direkt an; gibt es hingegen mehrere Möglichkeiten, stehen diese zur Auswahl (Abbildung 2).

Abbildung 2: Per Klick zur richtigen Manpage im Konqueror.

Abbildung 2: Per Klick zur richtigen Manpage im Konqueror.

Struktur einer Manpage

Eine Manpage ist in der Regel in verschiedene Kapitel unterteilt – ganz oben sehen Sie den Namen des Befehls und die Sektion, der das Kommando zugeordnet ist. Im Bereich NAME finden Sie eine Kurzbeschreibung des Befehls, SYNOPSIS zeigt das Kommando mit den möglichen Argumenten an, und DESCRIPTION beschreibt, wie der Befehl funktioniert.

Danach geht’s ins Detail: Es folgt eine vollständige Auflistung aller Parameter. Einige Handbuchseiten bieten unter EXAMPLES mehr oder weniger ausführliche Beispiele für die Benutzung des Kommandos. Am Ende der Manpage finden Sie Hinweise auf eventuelle bekannte Programmfehler (BUGS), den Autor der Handbuchseite (AUTHOR) und verwandte Programme (SEE ALSO).

Format, Format

Viele Manpages liegen im groff-Format vor – es handelt sich um eine Textauszeichnungsmethode, die der von Markup-Sprachen (z. B. HTML und SGML) oder dem Satzsystem LaTeX ähnelt. Mit speziellen Formatierungsbefehlen beschreiben Sie das Aussehen bzw. die Struktur des Textes. Anschließend wandeln Sie auf der Kommandozeile groff-Dokumente in formatierte ASCII-Ausgaben, HTML-Seiten oder PostScript-Dateien um.

Viele groff-Formatierungsbefehle stehen in Zeilen, die mit einem Punkt beginnen. Dahinter stehen jeweils Anweisungen, welche die Struktur der Manpage beschreiben. So stehen beispielsweise .SH für eine Kapitelüberschrift in einer Manpage und .PP für einen Zeilenumbruch bzw. neuen Paragraphen. Darüber hinaus gibt es die Möglichkeit, mit Zeichenfolgen Elemente im Fließtext (und nicht in eigenen Zeilen) zu beschreiben: So schalten Sie mit \fB auf das Schriftattribut “fett” (“bold”) um und mit \fP wieder zurück auf die vorherige Schriftart. Tabelle 1 zeigt die wichtigsten Formatierungsbefehle zum Nachschlagen; darüber hinaus lohnt sich ein Blick in die Manpage zu groff_man(7).

Tabelle 1: Formatierung in <C>groff<C>

.TH Titel-/Kopfzeile der Manpage
.SH Kapitel- bzw. Sektionsüberschrift
.SS Überschrift zweiter Ordnung
.PP Neuer Paragraph / Zeilenumbruch
.HP Beginn eines eingerückten Absatzes
.RE Ende eines eingerückten Absatzes
.IP Liste mit Aufzählungszeichen; in der Zeile nach der Formatanweisung steht als Aufzählungszeichen entweder eine Ziffer, ein Gliederungspunkt (\(bu oder ein Gedankenstrich (\(em), in der dritten Zeile die Definition.
.TP Liste ohne Aufzählungszeichen; die Zeile nach der Formatanweisung enthält die Bezeichner, die dritte Zeile die Beschreibung.
." Kommentar
\fB Formatiert den nachfolgenden Text fett (“bold”)
\fI Formatiert den nachfolgenden Text kursiv (“italic”)
\fR Formatiert den nachfolgenden Text mit Serifen (“roman”)
\fP Schaltet zur vorherigen Schriftart zurück

Das Grundgerüst erstellen

Learning by doing – am schnellsten lernen Sie die groff-Befehle, indem Sie eine eigene Manpage schreiben. Mehr als einen einfachen Text-Editor brauchen Sie dazu nicht. Legen Sie eine neue Datei an und geben Sie dieser beispielsweise die Endung .1, wenn es sich um ein Benutzerkommando handelt, das später in der ersten Manpage-Abteilung liegen soll. Die erste Zeile einer Manpage enthält traditionell den Titel, die Manpage-Sektion und das Datum der letzten Bearbeitung; tragen Sie also ein:

.TH HUHN 1 "22. Oktober 2004"

Als Nächstes legen Sie die einzelnen Kapitel an. Welche der schon genannten Sektionen Sie verwenden wollen, bleibt Ihnen selbst überlassen – es handelt sich lediglich um eine Konvention, nicht um eine feste Vorgabe; Sie können auch eigene Abschnitte definieren. Die einzelnen Sektionen fangen jeweils mit dem Befehl .SH an und stehen in einer neuen Zeile, danach folgt der Name der Sektion:

.SH NAME
.SH SYNOPSIS
.SH DESCRIPTION
.SH SEE ALSO
.SH BUGS
.SH AUTHOR

Ein Unterkapitel namens Options soll im Abschnitt DESCRIPTION die einzelnen Befehlsparameter erklären. Fügen Sie dazu ein strukturierendes Element ein:

.SH DESCRIPTION
.SS Options
…

Mehr Inhalt bitte!

Diese grundlegende Struktur füllen Sie nun nur noch mit Leben. Damit die Manpage von Kommandos wie apropos oder man -k nach Stichworten durchsucht werden kann, sollten Sie in der dritten Zeile (also direkt hinter dem Eintrag .SH NAME) den Namen und eine durch einen Bindestrich davon abgetrennte kurze Beschreibung des Befehls einfügen. Achten Sie darauf, dass vor dem Bindestrich ein Backslash steht:

.SH NAME
huhn \- Das sensationelle Henne-Ei-Skript

Im Abschnitt SYNOPSIS folgt die Kurzbeschreibung der Befehlssyntax mit einer Auflistung aller Optionen. Der Programmname soll hier fett (\fB...\fP) gesetzt sein, Parameterzusätze kursiv (\fI...\fP). Optionale Parameter stehen in eckigen Klammern:

.SH SYNOPSIS
\fBhuhn\fP [ -ei | -poak | -picken ] [ -t \fItyp\fP ] [ -escape \fIfarm\fP ]

Danach folgen ein Zeilenumbruch und in einem neuen Paragraph – optisch übersichtlich gestaltet – der Hinweis, wie die Befehlshilfe aufzurufen ist. Der Eintrag zur Versionsnummernabfrage kommt ebenfalls in eine eigene Zeile:

.PP
\fBhuhn\fP -h | --help
.PP
\fBhuhn\fP -v | --version

Im Abschnitt DESCRIPTION beschreiben Sie das Kommando nach Herzenslust in einem Fließtext. Mit den schon bekannten Formatanweisungen setzen Sie Befehle, Dateinamen und Optionen wieder kursiv oder fett, um sie besser kenntlich zu machen. Im Unterabschnitt Options notieren Sie in einer Liste die einzelnen Parameter und fügen eine Erklärung hinzu. Dazu verwenden Sie eine der in Tabelle 1 vorgestellten Listen, z. B. die Liste ohne Aufzählungszeichen: Zuerst steht in einer Zeile die Anweisung .TP, in der folgenden Zeile der Parameter und in der dritten Zeile die Erklärung. Ebenso gehen Sie für die restlichen Abschnitte vor – Listing 1 zeigt den Quelltext der huhn-Manpage zum Vergleich.

Listing 1

Manpage zu

huhn (1)

.TH HUHN 1 "22. Oktober 2004"
.SH NAME
huhn \- Das sensationelle Henne-Ei-Skript
.SH SYNOPSIS
\fBhuhn\fP [ -ei | -poak | -picken] [ -t \fItyp\fP ] [ -escape
\fIfarm\fP ]
.PP
\fBhuhn\fP -h | --help
.PP
\fBhuhn\fP -v | --version
.SH DESCRIPTION
Das sensationelle Henne-Ei-Skript kann viele tolle Dinge. Das Huhn kann
gackern, Koerner picken, Eier legen und von der Farm weglaufen. Die
einzelnen Parameter lauten:
.SS Options
.TP
\fB-ei\fP
Fordert das Huhn auf, ein Ei zu legen. Die Frage, ob die Henne oder das
Ei zuerst kommt, ist dabei unerheblich. Es bleibt abzuwarten, ob zu
diesem Problem jemals eine Loesung gefunden wird.
.TP
\fB-escape \fIfarm\fP
Da kein Huhn auf einer Huehnerfarm gefangen sein sollte, befreien Sie
die Hennen mit diesem Befehl, z. B. durch den Aufruf: \fB-escape
tweedie\fP.
.TP
\fB-h, --help\fP
Zeigt die vollstaendige Liste aller Parameter an.
.TP
\fB-poak\fP
Bringt das Huhn zum Gackern.
.TP
\fB-picken\fP
Zwingt das Huhn zur Nahrungsaufnahme.
.TP
\fB-t \fItyp\fP
Definiert den Huehnertyp, moegliche Werte:
.IP \(bu
\fIfrei\fP Freiland
.IP \(bu
\fIkaefig\fP Kaefig
.IP \(bu
\fIbatterie\fP Legebatterie
.TP
\fB-v, --version\fP
Zeigt die Versionsnummer des Skriptes an.
.SH SEE ALSO
Weitere Tipps zu Huehnern finden Sie im Internet. Fuer die Erstellung
von Handbuchseiten empfehlen wir die Manpages zu:
\fBgroff_man\fP(7), \fBgroff\fP(1), \fBman\fP(7)
.SH BUGS
Keine bekannten :)
.SH AUTHOR
Petronella, das Chefhuhn

Wandlungsfähig

Einen ersten Test, ob die Manpage Ihren optischen Vorstellungen entspricht, führen Sie auf der Kommandozeile durch. Wandeln Sie die gerade erstellte Handbuchseite mit den Manpage-Makros ins ASCII-Format um. Damit die Ausgabe nicht aus dem Terminal heraus scrollt, leiten Sie alles in den Pager less um:

groff -man -Tascii huhn.1 | less

Wer statt dessen lieber eine HTML- oder PostScript-Datei erstellt, setzt hinter den Parameter -T das entsprechende Format. Anstelle einer Ausgabe am Bildschirm empfiehlt sich hier, die Ausgabe in eine Datei umzuleiten, also

groff -man -Thtml huhn.1 > huhn.html

oder

groff -man -Tps huhn.1 > huhn.ps
Abbildung 3: Auf der Kommandozeile wandeln Sie die Manpage mit nur einem Befehl in eine Web-Seite um.

Abbildung 3: Auf der Kommandozeile wandeln Sie die Manpage mit nur einem Befehl in eine Web-Seite um.

An Ort und Stelle

Bleibt noch die Frage, was zu tun ist, damit andere Benutzer im System die Manpage mit dem Kommando man huhn lesen können. Kopieren Sie als Administrator die Datei huhn.1 an die richtige Stelle:

cp huhn.1 /usr/share/man/man1/

Wer nicht auf das tägliche Update der Manpage-Datenbank warten möchte, führt – ebenfalls als Administrator – den Befehl

mandb

aus. Praktisch: Sollte die Seite schwere syntaktische Fehler aufweisen, weist das mandb-Kommando darauf hin. Hat alles geklappt, sehen Sie hingegen eine Ausgabe wie z. B.:

…
4 man subdirectories contained newer manual pages.
27 manual pages were added.
0 stray cats were added.
0 old database entries were purged.

Text-Editor oder GUI?

Wer sich die Formatierungsbefehle nicht merken will, verwendet z. B. den grafischen Editor ManEdit (http://wolfpack.twu.net/ManEdit/). Mit Syntax-Highlighting, vorgefertigten Tags und einer Preview-Funktion wird das Doku-Schreiben zum Kinderspiel (Abbildung 4).

Eines ist allerdings sicher: Auch bei der Arbeit mit ManEdit lohnt es sich, mehr über die Hintergründe zur Manpage-Erstellung zu wissen – wer den Aufbau und die Funktionsweise von groff kennt, arbeitet auch mit dem GUI-Editor effektiver (hge).

Abbildung 4: Per Klick zur Manpage mit ManEdit.

Abbildung 4: Per Klick zur Manpage mit ManEdit.

Glossar

Optionen
Den meisten Programmen können Sie beim Aufruf neben dem Befehlsnamen weitere Informationen mitgeben. Dazu gehören u. a. ein oder mehrere Dateinamen der zu bearbeitenden Datei(en) und/oder Optionen (auch Parameter genannt), die Änderungen im Verhalten des Befehls bewirken.
apropos
Wer den genauen Namen eines Befehls nicht kennt, kann durch den Aufruf apropos <begriff> oder man -k <begriff> alle Kommandos auflisten, in deren Beschreibung <begriff> vorkommt. Die vorhandenen Manpages bzw. diese Kurzbeschreibungen der dritten Zeilen werden dazu in einer Datenbank verwaltet – auf den meisten Systemen ist ein täglicher Cron-Job dafür zuständig, die Einträge zu aktualisieren. Alternativ hilft nach dem Erstellen einer neuen Handbuchseite auch der Befehl mandb (als Administrator ausgeführt).
man -k
Wer den genauen Namen eines Befehls nicht kennt, kann durch den Aufruf apropos <begriff> oder man -k <begriff> alle Kommandos auflisten, in deren Beschreibung <begriff> vorkommt. Die vorhandenen Manpages bzw. diese Kurzbeschreibungen der dritten Zeilen werden dazu in einer Datenbank verwaltet – auf den meisten Systemen ist ein täglicher Cron-Job dafür zuständig, die Einträge zu aktualisieren. Alternativ hilft nach dem Erstellen einer neuen Handbuchseite auch der Befehl mandb (als Administrator ausgeführt).
LinuxUser 12/2004 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben