Am zweiten Tag unseres CLI-Adventskalenders beschäftigen wir uns mit man
. Aber immer schön der Reihe nach!
Einen schönen zweiten Dezember allerseits! Ich hoffe ihr habt ein schönes Wochenende. Und gibt es etwas schöneres, als sich zur kalten Jahreszeit mit einer heißen Tasse Tee und einem Laptop mit einer offenen Kommandozeile auf die Couch zu legen?
man
Gestern ging es um ein nützliches Werkzeug, heute beschäftigen wir uns mit dem großen Unbekannten. Hinter dem Cursor der auf unsere Eingabe wartet steckt eine Untiefe an Befehlen, wie ein tiefer Ozean.
compgen -c | sort -u | wc -l
Bei mir sind es aktuell 6018. Von dem Großteil dieser Befehle habe ich noch nie gehört. Wie also bezwinge ich meine eigene Unwissenheit, um doch noch nützliche Dinge auf der Kommandozeile zu tun?
Linux/OSX/Unix wird mit einem Handbuch ausgeliefert.
Dieses Handbuch ist von überall erreichbar.
man ls
Wenn ich einen Befehl nicht kenne, kann ich nach ihm suchen:
man -k json
… eine Funktionalität übrigens, die den meisten Leuten als apropos
bekannt ist:
apropos json
Ich bin auch nicht darauf festgelegt, Manpages im Terminal zu lesen. Ich kann es auch im Browser tun …
man -Hfirefox ps
…oder als PDF!
man -t cat | ps2pdf - cat.pdf
Manpages haben verschiedene Sektionen:
- General commands
- System calls
- Library functions, covering in particular the C standard library
- Special files (usually devices, those found in /dev) and drivers
- File formats and conventions
- Games and screensavers
- Miscellaneous
- System administration commands and daemons
Wer sich also zu C aufschlauen möchte, kann das tun:
man 3 printf
Und natürlich hat das Handbuch auch ein Handbuch.
man man
Lerne die wichtigsten Dinge
Die Manpages sind in den 70er Jahren entstanden, als es noch gar keine Dokumentation für Unix gab. Ihr Format ist nicht das Ideale, wenn man schnelle Antworten braucht.
Eine der möglichen Antworten auf dieses Problem ist das tldr-Projekt, das praktische Beispiele für alle gängigen Befehle sammelt. Das Projekt gibt es aber natürlich nicht nur im Browser, sondern auch mit einem nützlichen Kommandozeilen-Tool. Ein tldr ps
liefert folgenden Output:
ps Information about running processes. More information: https://manned.org/ps. - List all running processes: ps aux - List all running processes including the full command string: ps auxww - Search for a process that matches a string: ps aux | grep string - List all processes of the current user in extra full format: ps --user $(id -u) -F - List all processes of the current user as a tree: ps --user $(id -u) f - Get the parent PID of a process: ps -o ppid= -p pid - Sort processes by memory consumption: ps --sort size
Es gibt eine ganze Reihe solcher Tools. Wer sich nach dem letzten Blogartikel in curl
verliebt hat, kann mit curl cht.sh/ps
das Cheatsheet-API hernehmen. Und wer sich vertippt hat und sich nicht mehr sicher ist, wie der Befehl nun genau hieß, dem hilft das weniger jugendfrei benamtes Werkzeug thefuck.
Lerne alle Dinge
Wenn man wirklich neugierig ist, dann gibt es natürlich noch mehr Befehle.
whatis mv whereis mv which mv type mv
Diese Befehle können besonders nützlich sein, wenn sich ein Programm nicht wie erwartet verhält. Wird die richtige Version benutzt?
ChatGPT is Dein Freund
Nein, ernsthaft: Eine starke Tradition aus guter Dokumentation und vielen Fragen und Antworten über Jahrzehnte bilden eine gute Grundlage für jedes AI-Training. Die Antworten, die ChatGPT zu Kommandozeilentools liefern kann, sind Gold wert!
Kartenspiele der besonderen Art
Kein Sponsor oder Affiliate, aber Punk X bringt Spiele wie das UNIX Pipe Game raus (noch besser mit der Process Substitution Expansion), das sogar Kindern spielerisch den Umgang mit der Kommandozeile näher bringt. Wenn ihr mich live trefft, habe ich sicher eins davon im Rucksack und lasse mich sehr wahrscheinlich zu einem Spiel überreden. Und ja, es ist genauso nerdig wie es klingt.
Sonst hilft natürlich auch ein gutes Buch
Die zeitlose Natur der Kommandozeile (siehe die Shell-Weisheit des Tages) bedeutet, dass kein Buch zu staubig ist, um uns bei unserer Reise zu unterstützen. Um diese Blogartikel zu schreiben, arbeite ich mich durch einen ganzen Stapel von ihnen und jedes einzelne von ihnen beleuchtet die gleichen Befehle nochmal aus einem neuen Blickwinkel und mit einem anderen Ziel. Und viele von ihnen enthalten Befehle, von denen ich noch nie gehört habe.
Wir lernen also gemeinsam. Ich bin dankbar, dass ihr mich auf dieser Reise begleitet. Schaut auch morgen wieder rein für neue Sehenswürdigkeiten. Eine schöne Adventszeit!
Ein Osterei zur Weihnachtszeit
Oh, und eins noch! Wenn man man
30 Minuten nach Mitternacht ausführt, bekommt man eine ungewöhnliche Fehlermeldung. Mehr Informationen zu diesem Thema findet ihr auf unix.stackexchange. Und außerdem auf YouTube.
Viel Freude mit eurem Ohrwurm ;)
OK, das ist zu hochtrabend formuliert … aber die grundlegenden Befehle, die ich vor Jahrzehnten gelernt habe – damals auf meinem NetBSD-Laptop – funktionieren heute immer noch mit den selben Optionen auf meiner Arch-Linux-Maschine.
Gerade als Softwareentwickler sind wir gewohnt, dass viel Detailwissen eine kurze Halbwertszeit hat. APIs ändern sich, hippe neue Tools kommen auf dem Markt, Webentwicklung macht man heutzutage mit Framework XY und alle Daten persistieren wir in dieser neuen Datenbank.
Shell-Befehle geben uns die Gelegenheit, etwas zu tun, was sonst nur sehr schwierig und sehr temporär erreichbar ist: Etwas wirklich tief meistern ohne enorme Mengen an Zeit in einem kurzen Zeitrahmen zu investieren. So ungewohnt und griesgrämig wie Shellskript-Syntax auch sein mag (mehr dazu hinter späteren Türen dieses Adventskalenders), so universell ist sie auch. Auf jeder Maschine mit der wir uns verbinden treffen wir alte Bekannte, die uns mit Rat und Tat zur Seite stehen. Und: es braucht nicht einmal viel. Shell-Wissen hat die Angewohnheit, sich anzusammeln.
Mein Punkt nochmal in Kürze: Mein Wissen über Cordova und AngularJS und grunt kann ich inzwischen in der Pfeife rauchen. Die Welt hat sich weiter gedreht. Befehle wie grep
benutze ich heute noch genauso wie damals. Die Zeit, eine Manpage zu lesen, fühlt sich meistens wie Overkill an, zahlt sich aber angesichts des extrem langen Zeitrahmens der Nützlichkeit fast immer aus!
Schreibe einen Kommentar