Website-Suche

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.