Zoeken op website

Linux-terminalsessies opnemen en opnieuw afspelen met behulp van de opdrachten 'script' en 'scriptreplay'


In deze handleiding gaan we bekijken hoe je script en scriptreplay commando's in Linux kunt gebruiken die je kunnen helpen bij het opnemen van commando's en hun uitvoer die op je terminal worden afgedrukt gedurende een bepaalde tijd. sessie.

Het history-commando is een geweldig opdrachtregelhulpprogramma waarmee gebruikers eerder gebruikte opdrachten kunnen opslaan, maar de uitvoer van een opdracht wordt niet opgeslagen.

Mis het niet: Showterm.io – Een Linux Terminal Recording Tool

Mis het niet: 8 beste desktopschermrecorders voor Linux

Daarom is de opdracht script handig om u een krachtige functionaliteit te bieden waarmee u alles wat op uw terminal wordt afgedrukt, kunt vastleggen in een log_file. U kunt dit bestand later raadplegen als u de uitvoer van een opdracht in de geschiedenis van het log_bestand wilt bekijken.

U kunt ook opdrachten die u hebt opgenomen met de opdracht scriptreplay opnieuw afspelen met behulp van timinginformatie.

Hoe Linux Terminal op te nemen met behulp van scriptopdracht

De opdracht script slaat terminalactiviteiten op in een logbestand dat door een gebruiker kan worden benoemd. Wanneer een naam niet door een gebruiker wordt opgegeven, wordt de standaardbestandsnaam, typescript gebruikt .

Basissyntaxis van scriptopdracht

script [options] - -timing=timing_file log_filename

Om de opname van de Linux-terminal te starten, typt u script en voegt u de log bestandsnaam toe, zoals weergegeven.


tecmint@tecmint ~ $ script history_log.txt

Script started, file is history_log.txt

Om script te stoppen, typt u exit en drukt u op [Enter].


tecmint@tecmint ~ $ exit

Script done, file is history_log.txt

Als het script niet naar het genoemde logbestand kan schrijven, wordt er een fout weergegeven.

In de onderstaande uitvoer staan de machtigingen van het bestand typescript bijvoorbeeld niet toe dat het bestand door een gebruiker of groep wordt gelezen, geschreven en uitgevoerd. Wanneer u de scriptopdracht uitvoert zonder de naam van een logbestand, probeert deze naar het standaardbestand, typescript, te schrijven, waardoor er een fout wordt weergegeven.


tecmint@tecmint ~ $ ls -l typescript

--------- 1 ubuntu ubuntu 144 Sep 15 00:00 typescript

tecmint@tecmint ~ $ script

script: open failed: typescript: Permission denied
Terminated

Voorbeelden van het gebruik van de scriptopdracht

In het onderstaande voorbeeld heb ik mijn logbestand script.log genoemd. Je kunt je bestand een andere naam geven.


tecmint@tecmint ~ $ script script.log

Probeer nu enkele opdrachten uit te voeren, zodat het script uitgevoerde opdrachten op de terminal kan opnemen.


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

Probeer nu het logbestand ‘script.log‘ te bekijken voor alle opgenomen opdrachten, terwijl je de log bekijkt, realiseer je je dat het script ook regelfeeds en backspaces opslaat.


tecmint@tecmint ~ $ vi script.log
Voorbeelduitvoer

^[[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
~                                                              

U kunt de optie -a gebruiken om het logbestand of typoscript toe te voegen, waarbij de eerdere inhoud behouden blijft.


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

Bekijk de inhoud van het script, log in nadat u de -a optie hebt gebruikt om het toe te voegen.


tecmint@tecmint ~ $ vi script.log
Voorbeelduitvoer

^[[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

Om de resultaten van een enkele opdracht, anders dan een interactieve shell-sessie, te loggen, gebruikt u de optie -c.


tecmint@tecmint ~ $ script -c 'hostname' script.log

Script started, file is script.log
linux-console.net
Script done, file is script.log

Als u wilt dat het script in een stille modus wordt uitgevoerd, kunt u de optie -q gebruiken. U zult geen bericht zien dat aangeeft dat het script wordt gestart of afgesloten.


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)

Om de timinginformatie in te stellen op standaardfout of een bestand, gebruikt u de optie –timing. De timinginformatie is handig als u de uitvoer die is opgeslagen in het logbestand opnieuw wilt weergeven.

Laten we het script starten en de volgende opdrachten w, uptime en cal uitvoeren om op te nemen.


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    

U kunt de bestanden script.log en time.txt voor de timingopdracht hierboven bekijken.


tecmint@tecmint ~ $ vi script.log
Voorbeelduitvoer

^[[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

Bekijk nu het time.txt bestand.


tecmint@tecmint ~ $ vi time.txt
Voorbeelduitvoer

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
...

Het bestand time.txt heeft twee kolommen, de eerste kolom laat zien hoeveel tijd er is verstreken sinds de laatste weergave en de tweede kolom toont het aantal tekens dat deze keer is weergegeven.

Gebruik de manpagina en –help om naar meer opties te zoeken en hulp te krijgen bij het gebruik van het opdrachtregelhulpprogramma voor scripts.

Gebruik scriptreplay om scripts opnieuw af te spelen met behulp van timinginformatie

De opdracht scriptreplay helpt bij het opnieuw afspelen van informatie in uw log_file, vastgelegd door de opdracht script.

De timinginformatie wordt gedefinieerd door de optie -timing=file die wordt gebruikt met de opdracht script en file is in dit geval file.txt dat werd gebruikt met de scriptopdracht .

Vergeet niet dat u het log_bestand moet opgeven dat u met de scriptopdracht hebt gebruikt.

Laten we nu de laatste drie commando's w, uptime en cal die we hadden uitgevoerd als volgt herhalen.


tecmint@tecmint ~ $ scriptreplay --timing=time.txt script.log

Wanneer het logbestand opnieuw wordt afgespeeld met behulp van de timinginformatie, worden de opgenomen commando's uitgevoerd en wordt hun uitvoer weergegeven op hetzelfde moment dat de oorspronkelijke uitvoer werd weergegeven tijdens de opname.

Samenvatting

Deze twee commando's, script en scriptreplay zijn gemakkelijk te gebruiken en helpen enorm als je dezelfde reeks commando's meerdere keren moet uitvoeren. Ze helpen veel bij het beheren van servers die alleen een opdrachtregelinterface hebben voor interactie met uw systeem. Ik hoop dat deze gids nuttig was en als je iets toe te voegen hebt of een uitdaging tegenkomt tijdens het gebruik ervan, aarzel dan niet om een reactie te plaatsen.