CLI- und GUI-Tools wie Script, Asciinema und SimpleScreenRecorder ermöglichen das Aufzeichnen und Wiederabspielen eingetippter Kommandos.
Im ersten Teil [1] dieser zweiteiligen Serie beleuchteten wir den Umgang mit der History der Shell und wie Sie darin zuvor verwendete Kommandos wiederfinden. Was wir darin jedoch unterschlagen haben, ist der Umstand, dass nicht immer alle von Ihnen getippten Kommandos in die History übernommen werden. Geben Sie nämlich ein Leerzeichen vor dem Kommando ein, unterbindet das meist die Archivierung des Kommandos in der Befehlshistorie. Listing 1 veranschaulicht das anhand mehrerer Aufrufe – das Kommando whoami fehlt in der darunter ausgegebenen Historie zwischen den beiden Kommandos zu Firefox und ping. Das zusätzliche Leerzeichen im Aufruf von Whoami ist zwar unscheinbar, aber wirkungsvoll.
Listing 1
Kommandos mit führendem Leerzeichen
$ firefox-esr & $ whoami frank $ ping -c 1 linuxuser.de PING linuxuser.de (104.21.37.20) 56(84) bytes of data. 64 bytes from 104.21.37.20 (104.21.37.20): icmp_seq=1 ttl=59 time=4.05 ms --- linux-user.de ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 4.052/4.052/4.052/0.000 ms $ history 3 2009 firefox-esr & 2010 ping -c 1 linuxuser.de 2011 history 3
Ob die Kommandos übernommen werden, regelt in der Bash die üblicherweise in der .bashrc konfigurierte Umgebungsvariable HISTCONTROL. Hat sie den Wert ignorespace, nimmt die History Eingaben mit führendem Leerzeichen nicht auf. In der Z-Shell gibt es das Pendant HIST_IGNORE_SPACE. Weitere Werte zur Steuerung dieses Verhaltens finden Sie in der Dokumentation der verwendeten Shell.
Benötigen Sie neben den zuvor getippten Kommandos auch deren Ausgaben, setzt das Ergänzungen in Ihrem Shell-Werkzeugkasten voraus. Die Historie der Kommandozeile sowie ihre Shell decken das allein nicht ab. Eine solche Aufzeichnung der Ausgaben braucht man beispielsweise für Reparaturprotokolle, Notfälle oder auch als Bestandteil einer Anwenderdokumentation.
Viele Linux-Trainer nutzen entsprechende Aufnahmen, um zu demonstrieren, wie Kommandos in der Praxis zusammenspielen. Sie nehmen eine solche Session meist als Videosequenz für ihre Kursteilnehmer oder andere Interessierte auf und stellen sie nach der Schulung zum selbstständigen Lernen und Vertiefen online zur Verfügung. Damit haben alle etwas davon.
Ausgaben aufzeichnen
Einen ersten Ansatz zum Aufzeichnen der Terminalausgaben bieten Bildschirmfotos. Bei vielen grafischen Bedienoberflächen gelingt ein Schnappschuss des kompletten Bildschirms über die Drucktaste. Die Kombination [Alt]+[Druck] nimmt dagegen meist lediglich das ausgewählte Fenster auf.
In Gimp erstellen Sie Screenshots über den Menüeintrag Datei | Erstellen | Bildschirmfoto [2]. Im sich öffnenden Dialog wählen Sie dann zwischen der gesamten Anzeige und lediglich dem ausgewählten Fenster (Abbildung 1). Zu den zusätzlichen Optionen darin zählt die Angabe der Verzögerung in Sekunden, um gegebenenfalls das gewünschte Fenster oder dessen Inhalt noch vor der Aufnahme passend zurechtzurücken.
Für einzelne Bilder erscheint dieses Vorgehen passabel, aber wie steht es mit ganzen Bildserien? Eignet sich Gimp nicht für die regelmäßige Aufnahme von Bildschirmfotos? Spoiler-Alert: Nein, das klappt trotz des recht nützlichen Gimp Batch Mode [3] nicht. Über ihn lässt sich aber zumindest ein Aufruf wie der aus der ersten Zeile von Listing 2 absetzen, um ein Vollbild zu erhalten. Die einzelnen Parameter des dazu verwendeten Plugins sind bislang nur in dessen Beschreibung dokumentiert. Sie umfassen den Aufrufmodus (1 für nicht-interaktiv), den Aufnahmemodus (1 für Vollbild), die Fensternummer (0 für den ganzen Bildschirm) sowie die X- und Y-Koordinaten für die linke obere und rechte untere Ecke des Bilds.
Listing 2
Screenshot-Tools
$ gimp -b "(plug-in-screenshot 1 1 0 0 0 100 100)" $ import -window root ausgabe.png $ shutter -window =.*firefox.* -o './%y-%m-%d-%T.png' -e
Allerdings funktioniert das in Listing 2 verwendete Plugin derzeit nicht mehr. Es wurde bereits Anfang der 2000er-Jahre entwickelt und spielt mit der aktuellen Gimp-API nicht mehr sauber zusammen. Eine Alternative bietet Bimp [4], das Batch Image Manipulation Plugin for Gimp, das wir bereits in LU 03/2023 kurz vorgestellt haben [5]. Als Quasi-Pendant zu Imagemagick erlaubt es das Bearbeiten eines ganzen Stapels von Bildern. Eine zeitversetzte Aufnahme einer Serie von Bildschirmfotos beherrscht es jedoch nicht.
Damit rücken die Werkzeuge Import [6] aus dem Imagemagick-Werkzeugkasten [7], Scrot [8], Gnome Screenshot [9] und Shutter [10] ins Blickfeld. Oft ist eines davon bereits installiert, da diverse Desktop-Umgebungen sie mitbringen.
Die zweite Zeile von Listing 2 zeigt einen Aufruf für Import zur Aufnahme des ganzen Bildschirms unter Debian GNU/Linux. Bei Verwendung einer anderen Distribution müssen Sie das Kommando noch um magick als Verweis auf Imagemagick ergänzen.
In Zeile 3 erstellt Shutter eine Aufnahme des Firefox-Fensters. Der Parameter -o erlaubt zusätzliche Platzhalter zum Ergänzen des Dateinamens um den aktuellen Zeitstempel. Im Beispiel lauten sie %y-%m-%d-%T für eine Angabe aus Jahr, Monat, Tag und Uhrzeit der Aufnahme. Der Schalter -e beendet die geskriptete Ausführung von Shutter; anderenfalls verbleibt das Programm im interaktiven Modus und wartet auf Eingaben. Verpackt in eine Schleife und ein kleines Bash-Skript, entsteht aus dem Kommando ohne viel Aufwand eine Bilderserie.
Der Nachteil an der Aufzeichnung mittels Screenshots: Die Aufrufe und die dazugehörigen Ausgaben stehen nicht als Texte bereit, sondern nur als Bilder. Man könnte zwar die Inhalte per Texterkennung extrahieren, um sie weiterzuverarbeiten, doch das wäre recht umständlich. Deshalb stellen wir Ihnen im Folgenden einige Werkzeuge vor, die die Ein- und Ausgaben aufnehmen. Damit ermöglichen diese Tools eine direkte Weiterverarbeitung, sei es als Bildschirmshow oder zur wiederholten Ausführung.
Script
Nun steht zunächst das Trio aus Script [11], Scriptlive und Scriptreplay [12] im Rampenlicht. Die drei grundlegenden Programme sind bei Debian GNU/Linux und Ubuntu bereits in dem essenziellen Paket bsdutils enthalten. Script zeichnet lediglich die Kommandos und Tastatureingaben samt deren Ausgaben im Terminal auf. Scriptlive und Scriptreplay verwerten diese Aufnahmen wieder: Ersteres führt die zuvor aufgezeichneten Kommandos erneut aus. Scriptreplay gibt die Kommandos samt Ausgaben als Film auf dem Bildschirm aus, ohne die sie tatsächlich erneut aufzurufen. Damit dient es eher Lern- und Demonstrationszwecken.
Scriptlive hingegen eignet sich zur Automatisierung. Da es alle aufgezeichneten Tastatureingaben in derselben Reihenfolge wieder abspielt, müssen Sie es in Hinsicht auf die Sicherheit jedoch mindestens wie ein Shell-Skript behandeln: Haben Sie während der Aufnahme mit Script auch Zugangsdaten eingegeben, finden die sich in den Tastaturaufzeichnungen ebenfalls. Selbst wenn sie nicht auf dem Bildschirm im Klartext erscheinen, gibt Scriptlive sie bei der Wiederholung “magisch” wieder ein. Das stellt unter Umständen ein erhebliches Sicherheitsrisiko dar. Lassen Sie also bei Ihren Eingaben Vorsicht walten, während Sie sie mit Script aufzeichnen.
Sie starten eine Aufnahme mit dem Kommando script -B, gefolgt vom Namen der Datei, in der das Tool die Ein- und Ausgaben speichern soll. Möchten Sie die Aufzeichnung später wieder abspielen, hängen Sie zusätzlich die Option --log-timing an, gefolgt vom Namen der Datei für die Zeitangaben. Danach geben Sie die Kommandos oder Tastendrücke über die Tastatur ein. Über das Kommando exit beenden Sie die Aufnahme wieder.
Abbildung 2 zeigt den gesamten Vorgang, wobei als Kommando lediglich uptime ausgeführt wurde. Die Aufnahme landet in der Datei aufzeichnung im aktuellen Verzeichnis, die zugehörigen Zeitangaben legt Script im File aufzeichnung-timing ab. In Abbildung 3 sehen Sie die gespeicherten Daten, die hier einfach mittels Cat im Terminal ausgegeben wurden.
Bei der Aufzeichnungsdatei handelt es sich um eine Textdatei. Sie enthält die Kommandos, deren Ausgaben sowie Steuerzeichen wie ANSI-Farbcodes, Zeilenvorschübe und Rückschritte. Seltsamerweise erscheinen die Eingaben doppelt. Wir haben dazu (noch) keine plausible Erklärung und vermuten eine Einstellung des Terminals als Ursache.
Um an eine bestehende Aufnahme weitere Eingaben anzufügen, ergänzen Sie den Aufruf von Script um den Schalter -a (“append”). Zum Abspielen einer Aufzeichnung starten Sie Scriptreplay beziehungsweise Scriptlive mit denselben Parametern wie Script. Über die registrierten Zeitangaben erfolgt die Ausgabe mit demselben Duktus wie bei der Eingabe. Es bleibt also jeder Vertipper und jede Denkpause für die Nachwelt erhalten. Bei Scriptlive (Abbildung 4) beobachteten wir im Test eine leichte Verzögerung bei der Ausführung, die das Ergebnis aber nicht beeinflusste.
Shell-Werkzeuge
Die nächsten beiden Kandidaten umfassen das Paar Ttyrec und Ttyplay, das Sie im Debian-Paket ttyrec finden. Die Programme basieren auf den bereits besprochenen Werkzeugen Script und Scriptreplay, lassen sich aber einfacher bedienen.
Das entsprechende Beispiel in Listing 3 greift das bisherige Vorgehen auf und nimmt lediglich einen Durchlauf von Uptime auf. Als Aufrufparameter genügt die zu speichernde Aufzeichnungsdatei (-a Datei). Das spätere Abspielen mit Ttyplay ergibt eine zu Listing 5 analoge Ausgabe. Möchten Sie eine Ausgabe von Ttyplay vorzeitig abbrechen, erledigen Sie das mit [Strg]+[C]. Über [+]+ und [-] erhöhen beziehungsweise verringern Sie die Abspielgeschwindigkeit der Aufnahme. Suchen Sie Inspiration zur Anwendung des Duos, hilft die Seite Tty Mania [13] mit Beispielen weiter.
Listing 3
Aufzeichnung mit Ttyrec
$ ttyrec -a aufzeichnung-ttyrec $ uptime 23:17:08 up 2 days, 5:47, 1 user, load average: 0,42, 0,60, 0,69 $ exit exit
Das Ttyrec/Ttyplay recht ähnliche Termrec [14] bildet mit Termplay, Termtime und Termcat quasi eine Viererbande, die mit jedem Programm im Terminal funktioniert. Als Besonderheit bietet es mehrere Aufzeichnungsformate an, unter anderem für Termplay, Ttyplay, Ttyplayer [15], Ipbt (It’s Playback Time [16]) und Asciinema [17]. Über die Option -f geben Sie das gewünschte Abspielformat an, beispielsweise -f ansicast für Asciinema.
Tty-record [18] nimmt ebenfalls alle Ein- und Ausgaben auf der Konsole auf, speichert sie jedoch in einer HTML-Datei mit Javascript-Elementen. Auf diese Weise spielen Sie die Aufnahme später im Webbrowser wieder ab. Eine Wiederholung als Kommandosequenz oder ein Export in andere Formate beherrscht Tty-record bislang nicht.
Byzanz [19] installieren Sie unter Debian GNU/Linux und Ubuntu aus dem gleichnamigen Paket, das die beiden Werkzeuge Byzanz-record und Byzanz-playback enthält. Die Software erlaubt das Aufnehmen und Wiederabspielen des gesamten Bildschirms, einzelner Fenster oder auch nur rechteckiger Bildschirmausschnitte. Als Ausgabeformate stehen Flash Video (FLV), animiertes GIF, Ogg Vorbis und WebM bereit.
Die Dauer der Aufzeichnung beschränkt sich ohne zusätzliche Angaben auf zehn Sekunden. Über die Option -d (Langform: --duration), gefolgt von einer Zeitangabe in Sekunden verlängern Sie die Aufnahme nach Wunsch. Listing 4 zeigt in der ersten Zeile den Aufruf für eine 15 Sekunden dauernde Aufnahme, die als Ausgabeformat Ogg Vorbis benutzt und die Ausgabe in der Datei aufzeichnung.ogv ablegt. Mit dem Aufruf aus der zweiten Zeile spielen Sie die Aufzeichnung wieder ab.
Listing 4
Byzanz im Einsatz
$ byzanz-record -d 15 aufzeichnung.ogv $ byzanz-playback aufzeichnung.ogv
Asciinema ähnelt Byzanz und steht als gleichnamiges Paket für Debian GNU/Linux, Ubuntu, Arch Linux und sogar Homebrew (MacOS X) zur Verfügung. Die Entwickler aktualisieren es regelmäßig, während bei Byzanz ein Update schon längere Zeit zurückliegt. Asciinema fokussiert auf Einfachheit und Stabilität. Um eine Sequenz aufzunehmen, verwenden Sie den Unterbefehl rec, das Abspielen klappt mit play. Beide Aufrufe benötigen zusätzlich den Namen der zu erstellenden respektive abzuspielenden Datei (Listing 5).
Listing 5
Asciinema benutzen
$ asciinema rec aufzeichnung.cast $ asciinema play aufzeichnung.cast
Das Schöne an der Aufzeichnung: Sie erfolgt als purer Text. Sie können sie anhalten, mit der Maus eine Passage auswählen und sie woanders wieder einfügen – beispielsweise in einem weiteren Terminal. Damit gehört fehlerbehaftetes Abtippen der Vergangenheit an. Abbildung 5 zeigt eine auf der Asciinema-Webseite gespeicherte Aufnahme einer Linux-Session mit einem markierten Kommando.
Erstellen Sie eigene Aufnahmen und möchten sie mit anderen Nutzern teilen, erlaubt Ihnen die Asciinema-Webseite das Anlegen eines Benutzerkontos zum Hochladen und Bereitstellen der Aufnahmen. Zum Abspielen lassen sich die Inhalte bei Bedarf aus dem ASCII-Video im Webbrowser kopieren. Damit entfällt das mitunter mühselige Abtippen.
Die Aufzeichnung wandeln Sie gegebenenfalls in eine animierte GIF-Datei um. Dazu bedarf es des zusätzlichen Werkzeugs Agg, das Sie von der Github-Seite des Projekts [20] als vorkompiliertes Binary oder als Quellcode zum Selbstkompilieren beziehen.
Grafische Werkzeuge
Finden Sie die Werkzeuge für die Kommandozeile zu unkomfortabel, ist vielleicht SimpleScreenRecorder [21] etwas für Sie. Es zeichnet einzelne Fenster oder gleich den ganzen Bildschirm auf, wahlweise mit oder ohne Audiokanal, und legt die Aufnahme als Videodatei ab, beispielsweise im Format MPEG4. Ein Textformat für die Wiedergabe unterstützt es derzeit nicht. Abbildung 6 zeigt den Einstellungsdialog von SimpleScreenRecorder.

Abbildung 6: Vor der Aufnahme mit SimpleScreenRecorder legen Sie die Aufzeichnungsparameter komfortabel fest.
Fazit
Ein klarer Favorit für den Alltag ergab sich im Test zunächst nicht. Alle vorgestellten Werkzeuge erfüllen ihren Zweck, wenn auch mit recht unterschiedlichen Ergebnissen. Die Werkzeuge rund um Script wirken recht simpel gestrickt. Viele gängige Distributionen bringen sie aber bereits vorinstalliert mit. Ttyrec, Tty-player und Termplay überflügeln Script zwar in Sachen Funktionen, überzeugen letztlich aber nicht wirklich.
Stehen die Handhabbarkeit des Werkzeugs im Alltag und die Weiternutzung der Aufzeichnungen im Vordergrund, punktet Asciinema: Es erzeugt kleine Dateien aus purem Text, die alle Informationen zu Farben mitnehmen und sich danach fast beliebig umwandeln und abspielen lassen, selbst im Webbrowser. Für den Autor passt diese Kombination am besten, weshalb er Asciinema bis auf Weiteres bevorzugt einsetzt. (jlu)
Danksagung
Der Autor bedankt sich bei Werner Heuser für seine Unterstützung und kritischen Anmerkungen bei der Erstellung des Beitrags.
Über den Autor
Frank Hofmann arbeitet zumeist von unterwegs aus als Entwickler, Trainer und Autor. Bevorzugte Arbeitsorte sind Berlin, Genf und Kapstadt. Er gehört zu den Verfassern des Debian-Paketmanagement-Buches [22].
Infos
-
History-Suche (Teil 1): Frank Hofmann, “Zurückgeblättert”, LU 01/2025, S. 84, https://www.linux-community.de/51407
-
“Screenshot mit GIMP erstellen”: https://gimp-werkstatt-forum.de/viewtopic.php?t=786
-
Gimp Batch Mode: https://www.gimp.org/tutorials/Basic_Batch/
-
Bimp: https://github.com/alessandrofrancesconi/gimp-plugin-bimp
-
Bimp: Claudius Grieger, “Alle auf einmal”, LU 03/2023, S. 58, https://www.linux-community.de/48822
-
Imagemagick: https://imagemagick.org
-
Scrot: https://github.com/resurrecting-open-source-projects/scrot
-
Gnome Screenshot: https://github.com/GNOME/gnome-screenshot
-
Shutter: https://shutter-project.org
-
“How to Record Linux Terminal Commands With ‘script'”: https://www.howtogeek.com/devops/how-to-record-linux-terminal-commands-with-script/
-
“How to Record and Replay Linux Terminal Sessions”: https://www.tecmint.com/record-and-replay-linux-terminal-session-commands-using-script/
-
Tty Mania: http://0xcc.net/tty/
-
Termrec: http://angband.pl/termrec.html
-
Ttyplayer: https://kakugawa.math.ryukoku.ac.jp/misc/ttyplayer/index-en.shtml
-
It’s Playback Time: https://www.chiark.greenend.org.uk/~sgtatham/ipbt/
-
Asciinema: https://asciinema.org/
-
Tty-record: https://github.com/elisescu/tty-record
-
SimpleScreenRecorder: https://www.maartenbaert.be/simplescreenrecorder/
-
Debian-Paketmanagement-Buch: https://dpmb.org










