So zeichnen Sie Linux-Terminalsitzungen mit den Befehlen „script“ und „scriptreplay“ auf und geben sie wieder
In diesem Handbuch werden wir uns mit der Verwendung von script- und scriptreplay-Befehlen unter Linux befassen, die Ihnen dabei helfen können, Befehle aufzuzeichnen und deren Ausgabe während eines bestimmten Zeitraums auf Ihrem Terminal auszugeben Sitzung.
Der Befehl „history“ ist ein großartiges Befehlszeilendienstprogramm, das Benutzern hilft, zuvor verwendete Befehle zu speichern, die Ausgabe eines Befehls wird jedoch nicht gespeichert.
Nicht verpassen: Showterm.io – Ein Linux-Terminal-Aufzeichnungstool
Nicht verpassen: Die 8 besten Desktop-Bildschirmrekorder für Linux
Daher ist der Befehl script praktisch, um Ihnen eine leistungsstarke Funktionalität bereitzustellen, mit der Sie alles, was auf Ihrem Terminal gedruckt wird, in einer log_file aufzeichnen können. Sie können dann später auf diese Datei zurückgreifen, falls Sie die Ausgabe eines Befehls im Verlauf aus der log_file anzeigen möchten.
Sie können auch Befehle wiedergeben, die Sie mit dem Befehl scriptreplay aufgezeichnet haben, indem Sie Zeitinformationen verwenden.
So zeichnen Sie ein Linux-Terminal mit dem Skriptbefehl auf
Der Befehl script speichert Terminalaktivitäten in einer Protokolldatei, die vom Benutzer benannt werden kann. Wenn vom Benutzer kein Name angegeben wird, wird der Standarddateiname typescript verwendet .
Grundlegende Syntax des Skriptbefehls
script [options] - -timing=timing_file log_filename
Um die Aufzeichnung des Linux-Terminals zu starten, geben Sie script ein und fügen Sie den Protokoll-Dateinamen wie gezeigt hinzu.
tecmint@tecmint ~ $ script history_log.txt
Script started, file is history_log.txt
Um das Skript zu stoppen, geben Sie exit ein und drücken Sie [Enter].
tecmint@tecmint ~ $ exit
Script done, file is history_log.txt
Wenn das Skript nicht in die genannte Protokolldatei schreiben kann, wird ein Fehler angezeigt.
In der folgenden Ausgabe erlauben beispielsweise die Berechtigungen der Datei typescript weder das Lesen, Schreiben noch die Ausführung der Datei durch einen Benutzer oder eine Gruppe. Wenn Sie den Skriptbefehl ohne einen Protokolldateinamen ausführen, versucht er, in die Standarddatei typescript zu schreiben und zeigt daher einen Fehler an.
tecmint@tecmint ~ $ ls -l typescript
--------- 1 ubuntu ubuntu 144 Sep 15 00:00 typescript
tecmint@tecmint ~ $ script
script: open failed: typescript: Permission denied
Terminated
Beispiele für die Verwendung des Skriptbefehls
Im folgenden Beispiel habe ich meine Protokolldatei script.log genannt. Sie können Ihrer Datei einen anderen Namen geben.
tecmint@tecmint ~ $ script script.log
Versuchen Sie nun, einige Befehle auszuführen, damit das Skript ausgeführte Befehle auf dem Terminal aufzeichnen kann.
tecmint@tecmint ~ $ cal
September 2015
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
tecmint@tecmint ~ $ w
14:49:40 up 4:06, 2 users, load average: 1.37, 1.56, 1.62
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
tecmint tty8 :0 10:45 4:06m 7:40 0.36s x-session-manager
tecmint pts/5 :0 13:42 4.00s 0.07s 0.00s script script.log
tecmint@tecmint ~ $ uptime
14:49:43 up 4:06, 2 users, load average: 1.37, 1.56, 1.62
tecmint@tecmint ~ $ whoami
tecmint
tecmint@tecmint ~ $ echo 'using script'
using script
tecmint@tecmint ~ $ exit
exit
Script done, file is script.log
Versuchen Sie nun, die Protokolldatei „script.log“ für alle aufgezeichneten Befehle anzuzeigen. Während Sie das Protokoll anzeigen, stellen Sie fest, dass das Skript auch Zeilenvorschübe und Rückschritte speichert.
tecmint@tecmint ~ $ vi script.log
Beispielausgabe
^[[0m^[[255D^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m cal^M
September 2015 ^M
Su Mo Tu We Th Fr Sa ^M
1 2 3 4 5 ^M
6 7 8 9 10 11 12 ^M
13 14 15 ^[[7m16^[[27m 17 18 19 ^M
20 21 22 23 24 25 26 ^M
27 28 29 30 ^M
^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m w^M
14:49:40 up 4:06, 2 users, load average: 1.37, 1.56, 1.62^M
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT^M
tecmint tty8 :0 10:45 4:06m 7:40 0.36s x-session-manager^M
tecmint pts/5 :0 13:42 4.00s 0.07s 0.00s script script.log^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m uptime^M
14:49:43 up 4:06, 2 users, load average: 1.37, 1.56, 1.62^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m whoami^M
tecmint^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m echo ''^Hu'^Hs'^Hi'^Hn'^Hg'^H '^Hs'^Hc'^Hr'^Hi'^Hp'^Ht'^H^M
using script^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m exit^M
exit^M
Script done on Wednesday 16 September 2015 02:49:59 PM IST
~
Sie können die Option -a verwenden, um die Protokolldatei oder das Typoskript anzuhängen und dabei den vorherigen Inhalt beizubehalten.
tecmint@tecmint ~ $ script -a script.log
Script started, file is script.log
tecmint@tecmint ~ $ date
Wed Sep 16 14:59:36 IST 2015
tecmint@tecmint ~ $ pwd
/home/tecmint
tecmint@tecmint ~ $ whereis script
script: /usr/bin/script /usr/bin/X11/script /usr/share/man/man1/script.1.gz
tecmint@tecmint ~ $ whatis script
script (1) - make typescript of terminal session
Zeigen Sie den Inhalt des Skripts an und protokollieren Sie es, nachdem Sie die Option -a zum Anhängen verwendet haben.
tecmint@tecmint ~ $ vi script.log
Beispielausgabe
^[[0m^[[255D^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m date^M
Wed Sep 16 14:59:36 IST 2015^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m pwd^M
/home/tecmint^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m whre^H^[[K^H^[[Kereis script^M
script: /usr/bin/script /usr/bin/X11/script /usr/share/man/man1/script.1.gz^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m whatis script^M
script (1) - make typescript of terminal session^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m vi s^H^[[K^H^[[K^H^[[K^H^[[Kexit^M
exit^M
Um die Ergebnisse eines einzelnen Befehls außer einer interaktiven Shell-Sitzung zu protokollieren, verwenden Sie die Option -c.
tecmint@tecmint ~ $ script -c 'hostname' script.log
Script started, file is script.log
linux-console.net
Script done, file is script.log
Wenn Sie möchten, dass das Skript im stillen Modus ausgeführt wird, können Sie die Option -q verwenden. Es wird keine Meldung angezeigt, dass das Skript gestartet oder beendet wird.
tecmint@tecmint ~ $ script -c 'who' -q script.log
tecmint tty8 2015-09-16 10:45 (:0)
tecmint pts/5 2015-09-16 13:42 (:0)
Um die Timing-Informationen auf Standardfehler oder eine Datei festzulegen, verwenden Sie die Option –timing. Die Zeitinformationen sind nützlich, wenn Sie die in der Protokolldatei gespeicherte Ausgabe erneut anzeigen möchten.
Starten wir das Skript und führen Sie die folgenden aufzuzeichnenden Befehle w, uptime und cal aus.
tecmint@tecmint ~ $ script --timing=time.txt script.log
Script started, file is script.log
tecmint@tecmint ~ $ w
15:09:31 up 4:26, 2 users, load average: 1.38, 1.39, 1.47
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
tecmint tty8 :0 10:45 4:26m 8:15 0.38s x-session-manager
tecmint pts/5 :0 13:42 3.00s 0.09s 0.00s script --timing=time.txt script.log
tecmint@tecmint ~ $ uptime
15:09:36 up 4:26, 2 users, load average: 1.43, 1.40, 1.48
tecmint@tecmint ~ $ cal
September 2015
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Sie können die Dateien script.log und time.txt für den Timing-Befehl oben anzeigen.
tecmint@tecmint ~ $ vi script.log
Beispielausgabe
^[[0m^[[255D^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m w^M
15:12:05 up 4:28, 2 users, load average: 1.31, 1.37, 1.45^M
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT^M
tecmint tty8 :0 10:45 4:28m 8:20 0.38s x-session-manager^M
tecmint pts/5 :0 13:42 5.00s 0.09s 0.00s script --timing=time.txt script.log^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m uptime^M
15:12:07 up 4:28, 2 users, load average: 1.29, 1.36, 1.45^M
^[[01;32mtecmint@tecmint^[[01;34m ~ $^[[00m cal^M
September 2015 ^M
Su Mo Tu We Th Fr Sa ^M
1 2 3 4 5 ^M
6 7 8 9 10 11 12 ^M
13 14 15 ^[[7m16^[[27m 17 18 19 ^M
20 21 22 23 24 25 26 ^M
27 28 29 30 ^M
^M
Sehen Sie sich nun die Datei time.txt an.
tecmint@tecmint ~ $ vi time.txt
Beispielausgabe
0.259669 306
0.037680 829
0.000006 2
0.000002 100
0.000002 2
0.000002 102
0.000019 202
0.000004 2
0.000002 102
0.000015 100
0.000002 2
0.000003 2
0.000002 99
0.000011 2
0.000003 82
...
Die Datei time.txt besteht aus zwei Spalten. In der ersten Spalte wird angezeigt, wie viel Zeit seit der letzten Anzeige vergangen ist, und in der zweiten Spalte wird die Anzahl der Zeichen angezeigt, die dieses Mal angezeigt wurden.
Verwenden Sie die Manpage und –help, um nach weiteren Optionen und Hilfe bei der Verwendung des Skript-Befehlszeilendienstprogramms zu suchen.
Verwenden von scriptreplay zum Wiedergeben von Skripten mithilfe von Zeitinformationen
Der Befehl scriptreplay hilft bei der Wiedergabe von Informationen in Ihrer log_file, die durch den Befehl script aufgezeichnet wurden.
Die Timing-Informationen werden durch die Option -timing=file definiert, die mit dem Befehl script verwendet wird, und file ist in diesem Fall file.txt das mit dem Skriptbefehl verwendet wurde.
Denken Sie daran, dass Sie die Protokolldatei angeben müssen, die Sie mit dem Skriptbefehl verwendet haben.
Lassen Sie uns nun die letzten drei Befehle w, uptime und cal wiederholen, die wir wie folgt ausgeführt haben.
tecmint@tecmint ~ $ scriptreplay --timing=time.txt script.log
Wenn die log_file unter Verwendung der Zeitinformationen wiedergegeben wird, werden die aufgezeichneten Befehle ausgeführt und ihre Ausgabe wird zur gleichen Zeit angezeigt, zu der die ursprüngliche Ausgabe während der Aufzeichnung angezeigt wurde.
Zusammenfassung
Diese beiden Befehle, script und scriptreplay, sind einfach zu verwenden und helfen sehr, wenn Sie denselben Befehlsstapel mehrmals ausführen müssen. Sie helfen sehr bei der Verwaltung von Servern, die nur über eine Befehlszeilenschnittstelle für die Interaktion mit Ihrem System verfügen. Ich hoffe, dieser Leitfaden war nützlich. Wenn Sie etwas hinzufügen möchten oder bei der Verwendung auf eine Herausforderung stoßen, zögern Sie nicht, einen Kommentar zu hinterlassen.