Com gravar i reproduir sessions de terminal de Linux mitjançant ordres de script i scriptreplay


En aquesta guia veurem com utilitzar un script i ordres de reproducció d'scripts a Linux que us poden ajudar a gravar ordres i la seva sortida impresa al vostre terminal durant una sessió determinada.

L'ordre history és una gran utilitat de línia d'ordres que ajuda els usuaris a emmagatzemar l'ordre anterior utilitzada, tot i que no emmagatzema la sortida d'una ordre.

Per tant, l'ordre d'script és útil per proporcionar-vos una potent funcionalitat que us ajuda a gravar tot el que s'imprimeix al vostre terminal en un fitxer_log. A continuació, podeu consultar aquest fitxer més endavant per si voleu veure la sortida d'una ordre a l'historial des del fitxer_log.

També podeu reproduir les ordres que hàgiu enregistrat mitjançant l'ordre scriptreplay utilitzant una informació de temps.

Com gravar el terminal de Linux mitjançant l'ordre d'script

L'ordre d'script emmagatzema les activitats del terminal en un fitxer de registre que pot ser nomenat per un usuari, quan un usuari no proporciona un nom, s'utilitza el nom del fitxer predeterminat, mecanografiat.

# script [options] - -timing=timing_file log_filename

Per començar a gravar el terminal Linux, escriviu script i afegiu el nom del fitxer de registre tal com es mostra.

[email  ~ $ script history_log.txt

Script started, file is history_log.txt

Per aturar l'script, escriviu exit i premeu [Enter].

[email  ~ $ exit

Script done, file is history_log.txt

Si l'script no pot escriure al fitxer de registre anomenat, mostra un error.

Per exemple, a la sortida següent, els permisos del fitxer mecanografiat no permeten llegir, escriure i executar el fitxer no per part de cap usuari o grup. Quan executeu l'ordre de l'script sense un nom de fitxer de registre, prova d'escriure al fitxer predeterminat i, per tant, mostra un error mecanografiat.

[email  ~ $ ls -l typescript

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

[email  ~ $ script

script: open failed: typescript: Permission denied
Terminated

He anomenat el meu fitxer de registre script.log a l'exemple següent, podeu donar-li un nom diferent al vostre fitxer.

[email  ~ $ script script.log

Ara proveu d'executar algunes ordres per permetre que l'script enregistri les ordres executades al terminal.

[email  ~ $ 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           
                      
[email  ~ $ w

 14:49:40 up  4:06,  2 users,  load average: 1.37, 1.56, 1.62
USER     TTY      FROM             [email    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

[email  ~ $ uptime

 14:49:43 up  4:06,  2 users,  load average: 1.37, 1.56, 1.62

[email  ~ $ whoami

tecmint

[email  ~ $ echo 'using script'

using script
[email  ~ $ exit
exit
Script done, file is script.log

Ara proveu de veure el fitxer de registre script.log per a totes les ordres enregistrades, mentre visualitzeu el registre, us adoneu que l'script també emmagatzema fluxos de línia i retrocés.

[email  ~ $ vi script.log
^[[0m^[[255D^[[01;[email ^[[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;[email ^[[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             [email    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;[email ^[[01;34m ~ $^[[00m uptime^M
 14:49:43 up  4:06,  2 users,  load average: 1.37, 1.56, 1.62^M
^[[01;[email ^[[01;34m ~ $^[[00m whoami^M
tecmint^M
^[[01;[email ^[[01;34m ~ $^[[00m echo ''^Hu'^Hs'^Hi'^Hn'^Hg'^H '^Hs'^Hc'^Hr'^Hi'^Hp'^Ht'^H^M
using script^M
^[[01;[email ^[[01;34m ~ $^[[00m exit^M
exit^M

Script done on Wednesday 16 September 2015 02:49:59 PM IST
~                                                              

Podeu utilitzar l'opció -a per afegir el fitxer de registre o mecanografia, conservant el contingut anterior.

[email  ~ $ script -a script.log
Script started, file is script.log

[email  ~ $ date
Wed Sep 16 14:59:36 IST 2015


[email  ~ $ pwd
/home/tecmint


[email  ~ $ whereis script
script: /usr/bin/script /usr/bin/X11/script /usr/share/man/man1/script.1.gz


[email  ~ $ whatis script
script (1)           - make typescript of terminal session

Visualitzeu el contingut de l'script, registreu-lo després d'utilitzar l'opció -a per afegir-lo.

[email ecmint ~ $ vi script.log
^[[0m^[[255D^[[01;[email ^[[01;34m ~ $^[[00m date^M
Wed Sep 16 14:59:36 IST 2015^M
^[[01;[email ^[[01;34m ~ $^[[00m pwd^M
/home/tecmint^M
^[[01;[email ^[[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;[email ^[[01;34m ~ $^[[00m whatis script^M
script (1)           - make typescript of terminal session^M
^[[01;[email ^[[01;34m ~ $^[[00m vi s^H^[[K^H^[[K^H^[[K^H^[[Kexit^M
exit^M

Per registrar els resultats d'una única ordre que no sigui una sessió d'intèrpret d'ordres interactiva, utilitzeu l'opció -c.

[email  ~ $ script -c 'hostname' script.log

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

Si voleu que l'script s'executi en un mode silenciós, podeu utilitzar l'opció -q. No veureu cap missatge que mostri que l'script s'està iniciant o sortint.

[email  ~ $ script -c 'who'  -q  script.log

tecmint  tty8         2015-09-16 10:45 (:0)
tecmint  pts/5        2015-09-16 13:42 (:0)

Per configurar la informació de temps com a error estàndard o un fitxer, utilitzeu l'opció –timing. La informació del temps és útil quan voleu tornar a mostrar la sortida emmagatzemada al fitxer_log.

Comencem l'script i executem les ordres següents w, temps d'activitat i cal que s'enregistraran.

[email  ~ $ script --timing=time.txt script.log
Script started, file is script.log

[email  ~ $ w
 15:09:31 up  4:26,  2 users,  load average: 1.38, 1.39, 1.47
USER     TTY      FROM             [email    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

[email  ~ $ uptime
 15:09:36 up  4:26,  2 users,  load average: 1.43, 1.40, 1.48

[email  ~ $ 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    

Podeu veure els fitxers script.log i time.txt per a l'ordre de temporització anterior.

[email  ~ $ vi script.log
^[[0m^[[255D^[[01;[email ^[[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             [email    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;[email ^[[01;34m ~ $^[[00m uptime^M
 15:12:07 up  4:28,  2 users,  load average: 1.29, 1.36, 1.45^M
^[[01;[email ^[[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

Ara visualitzeu el fitxer time.txt.

[email  ~ $ vi time.txt
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
...

El fitxer time.txt té dues columnes, la primera columna mostra quant de temps ha transcorregut des de l'última visualització i la segona columna, mostra el nombre de caràcters que s'han mostrat aquesta vegada.

Utilitzeu la pàgina de manual i –help per cercar més opcions i ajuda per utilitzar la utilitat de la línia d'ordres de l'script.

Ús de scriptreplay per reproduir scripts utilitzant informació de temps

L'ordre scriptreplay ajuda a reproduir la informació del vostre fitxer de registre enregistrada per l'ordre script.

La informació de temps es defineix per l'opció -timing=file que s'utilitza amb l'ordre de l'script i, en aquest cas, el fitxer és file.txt que s'utilitza amb l'ordre de l'script .

Recordeu que heu d'especificar el fitxer de registre que heu utilitzat amb l'ordre de l'script.

Ara tornem a reproduir les últimes tres ordres w, temps de funcionament i cal que havíem executat de la següent manera.

[email  ~ $ scriptreplay --timing=time.txt script.log

Quan el fitxer de registre es reprodueix amb la informació de temps, les ordres enregistrades s'executen i la seva sortida es mostra al mateix temps que es mostrava la sortida original mentre s'enregistrava.

Resum

Aquestes dues ordres, script i scriptreplay són fàcils d'utilitzar i ajuden molt quan necessiteu executar el mateix lot d'ordres diverses vegades. Ajuden molt a gestionar servidors que només tenen una interfície de línia d'ordres per a la interacció amb el vostre sistema. Espero que aquesta guia sigui útil i si teniu alguna cosa a afegir o afrontar un repte mentre les feu servir, no dubteu a publicar un comentari.