Manpages (nach dem Unix-Kommando man, was für englisch manual „Handbuch“ steht) sind eine Sammlung von Hilfe- und Dokumentationsseiten unter Unix und verwandten Betriebssystemen. Sie werden mit den Kommandos man und whatis durchsucht sowie ausgegeben. Zur schnellen Durchmusterung wird ein eigener Index, die sogenannte Whatis-Datenbank, angelegt.
Mit dem Kommando whatis erhält man eine kurze Erklärung, was ein bestimmter Befehl macht. Angenommen ihr möchtet wissen, was es mit dem Befehl gpg auf sich hat, tippt ihr whatis gpg im Terminal ein, worauf diese Erklärung erscheint: "OpenPGP encryption and signing tool". Nun habt ihr im Internet eine Befehlsfolge gefunden, die eine bestimmte Anforderung erfüllt. Zum Beispiel dieser Befehl, um im Terminal ein Passwort zu generieren: gpg --gen-random --armor 1 20. Es ist keine gute Idee, einen Befehl auszuführen, ohne ihn vorher verstanden zu haben. Daher stellt sich die Frage, wie man verstehen kann, was der Befehl macht.
Geht doch ganz einfach: Wir schauen in der Manpage von gpg nach: man gpg. Dummerweise enthält diese Manpage 2565 Zeilen (man gpg | wc -l); darin sucht ihr bis zum Sanktnimmerleinstag. Man könnte doch nach dem Parameter --gen-random und --armor in der Manpage von gpg suchen. Gute Idee, aber wie macht man das? Als Erstes kommt einem vermutlich in den Sinn, die Ausgaben von man gpg nach grep zu pipen: man gpg | grep '--gen-random'. Hm, geht nicht: grep: Unbekannte Option »--gen-random«. Aha, grep versucht den Suchbegriff, als Option zu interpretieren. Dem kann man mit der Option -e abhelfen, die den Suchbegriff explizit als Suchmuster kennzeichnet.
man gpg | grep -e '--gen-random'
--gen-random 0|1|2 count
Das funktioniert, ist aber nicht hilfreich, weil nur die erste Zeile der Fundstelle ausgegeben wird. Besser wird es, wenn man grep sagt, es soll auch die nächsten n Zeilen ausgeben:
man gpg | grep -A 5 -e '--gen-random'
--gen-random 0|1|2 count
Emit count random bytes of the given quality level 0, 1 or 2. If count is not given or zero, an endless sequence of random
bytes will be emitted. If used with --armor the output will be base64 encoded. PLEASE, don't use this command unless you
know what you are doing; it may remove precious entropy from the system!
--gen-prime mode bits
Schon besser; allerdings weiss man nie, wie viele Folgezeilen man angeben soll. Zum Glück geht das besser, und zwar mit dem Befehl less: man gpg | less +/--gen-random. Der Suchbefehl wird hinter dem / eingegeben.
Mit der Taste n könnt ihr nun zu den weiteren Vorkommen des Suchbegriffs springen. Dieselbe Funktion steht auch innerhalb der Manpages zur Verfügung. Ihr öffnet die Manpage man gpg, tippt dann / gefolgt vom Suchtext. Auch jetzt werden die gefundenen Stellen hervorgehoben. Weitere können ebenfalls mit der Taste n angesprungen werden.
Wem das alles zu mühsam ist, kann auch die Webseite mankier.com öffnen und mit der Browser-eigenen Suche nach den interessanten Passagen suchen:
Ihr seht, wie so oft, führen viele Wege nach Rom. Es liegt an euch, welche Methode euch am ehesten zusagt.
Quellen:
Bildnachweis: Von John W. Eaton - Eigenes Werk, GPL, https://commons.wikimedia.org/w/index.php?curid=5130476
Mankier: https://www.mankier.com/1/gpg
Außer mankier.com hab ich glaub ich alles beschriebene schon oft/gelegentlich gemacht. Vielleicht am wenigsten danach grep -A.
Die Methoden funktionieren z.T. schon gut, wenn man weiß, wonach man sucht. Das ist aber gelegentlich der Fall, wenn man z.B. Rezepte nachvollzieht (z.B. aus Wiki von verschiedenen Distris, oder auch direkt von Seiten wie dieser) oder etwas in anderen Scripten gesehen hat.
Hilfreich kann auch sein, eine Manpage nach gewissen Regeln aufgebauten Text zu lesen. Und manchmal gezielt nach typischen Optionen/Begriffen, welche ein Tool haben müsste über die man nur mutmaßt, das sie realisiert sein müssten, zu suchen.
Der Artikel bringt mich auf den Gedanken ein Tool zu entwickeln, dass die zu einer gegebenen Kommandozeile , die man in dieses hinein pastet, z.B. eine komplexe Kommandozeile von gpg oder openssl, und so alle relevanten Auszüge, soweit es geht automatisch herausfiltert und vielleicht wieder in einer Manpage-ähnlichen Form darstellt oder wahlweise versucht eine Manpage entsprechend einzufärben.
Vielleicht wäre das eine Idee für den Programmierwettbewerb.
Man könnte in weiteren Schritten versuchen das Parsen der Optionen, welches sicher häufig über dieselben Bibliotheken erfolgt, der Programme nachzubilden/extrahieren und so daraus zusätzliche Infomationen abzuleiten. Idealerweise könnte man die Manpages als in speziell maschinenlesbarer Form abgelegte Daten aufbereiten, bzw. die Entwickler liefern sie wenn entsprechende Tools sich etabliert haben sie gleich so ab.
Schwierigkeiten machen gelegentlich auch sehr kurze Optionen, z.B. '-n', weil solch kurze Strings auch an vielen anderen Stellen auftauchen können.
Ein großer Dank an die hier schreibenden Autoren, für die vielen interessanten Artikel.
https://explainshell.com/ finde ich noch ganz nützlich. Dort kann man seine bestehenden Befehle eingeben und bekommt sie erläutert.