Cómo grabar y reproducir sesiones de terminal de Linux usando los comandos 'script' y 'scriptreplay'


En esta guía, veremos cómo usar un script y comandos scriptreplay en Linux que pueden ayudarlo a grabar comandos y su salida impresos en su terminal durante una sesión determinada.

El comando history es una gran utilidad de línea de comandos que ayuda a los usuarios a almacenar el comando utilizado anteriormente, aunque no almacena la salida de un comando.

Por lo tanto, el comando de secuencia de comandos es útil para proporcionarle una funcionalidad poderosa que le ayuda a registrar todo lo que está impreso en su terminal en un archivo de registro. Luego puede consultar este archivo más adelante en caso de que desee ver la salida de un comando en el historial desde el archivo log_file.

También puede reproducir comandos que grabó usando el comando scriptreplay usando una información de tiempo.

Cómo grabar una terminal Linux usando el comando de script

El comando de secuencia de comandos almacena las actividades de la terminal en un archivo de registro que puede ser nombrado por un usuario, cuando un usuario no proporciona un nombre, se usa el nombre de archivo predeterminado, mecanografiado.

# script [options] - -timing=timing_file log_filename

Para iniciar la grabación del terminal Linux, escriba script y agregue el nombre del archivo de registro como se muestra.

[email protected] ~ $ script history_log.txt

Script started, file is history_log.txt

Para detener el script, escriba exit y presione [Enter].

[email protected] ~ $ exit

Script done, file is history_log.txt

Si el script no puede escribir en el archivo de registro nombrado, muestra un error.

Por ejemplo, en el resultado a continuación, los permisos del archivo mecanografiado no permiten la lectura, escritura y ejecución del archivo por parte de ningún usuario o grupo. Cuando ejecuta el comando de secuencia de comandos sin un nombre de archivo de registro, intenta escribir en el archivo predeterminado, por lo que el mecanografiado muestra un error.

[email protected] ~ $ ls -l typescript

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

[email protected] ~ $ script

script: open failed: typescript: Permission denied
Terminated

He nombrado a mi archivo de registro script.log en el siguiente ejemplo, puede darle a su archivo un nombre diferente.

[email protected] ~ $ script script.log

Ahora intente ejecutar algunos comandos para permitir que el script registre los comandos ejecutados en la terminal.

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

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

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

[email protected] ~ $ whoami

tecmint

[email protected] ~ $ echo 'using script'

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

Ahora intente ver el archivo de registro "script.log" para todos los comandos grabados, mientras mira el registro, se da cuenta de que el script también almacena avances de línea y retrocesos.

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

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

Puede usar la opción -a para agregar el archivo de registro o el texto mecanografiado, conservando el contenido anterior.

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

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


[email protected] ~ $ pwd
/home/tecmint


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


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

Vea el contenido del script, inicie sesión después de usar la opción -a para agregarlo.

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

Para registrar los resultados de un solo comando que no sea una sesión de shell interactiva, use la opción -c.

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

Script started, file is script.log
tecmint.com
Script done, file is script.log

Si desea que el script se ejecute en modo silencioso, puede usar la opción -q. No verá un mensaje que muestre que el script se está iniciando o finalizando.

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

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

Para establecer la información de temporización en un error estándar o en un archivo, utilice la opción –timing. La información de tiempo es útil cuando desea volver a mostrar la salida almacenada en log_file.

Iniciemos el script y ejecutemos los siguientes comandos w, uptime y cal para ser registrados.

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

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

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

Puede ver el archivo script.log y time.txt para el comando de tiempo anterior.

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

Ahora vea el archivo time.txt.

[email protected] ~ $ 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 archivo time.txt tiene dos columnas, la primera columna muestra cuánto tiempo ha transcurrido desde la última pantalla y la segunda columna, muestra el número de caracteres que se han mostrado esta vez.

Utilice la página de manual y –help para buscar más opciones y ayuda para utilizar la utilidad de línea de comandos de script.

Uso de scriptreplay para reproducir scripts usando información de tiempo

El comando scriptreplay ayuda a reproducir información en su archivo_registro registrado por el comando de script.

La información de tiempo se define mediante la opción -timing u003d file utilizada con el comando de secuencia de comandos y, en este caso, el archivo es file.txt que se usó con el comando de secuencia de comandos.

Recuerde que debe especificar el archivo_registro que utilizó con el comando de secuencia de comandos.

Ahora reproduzcamos los últimos tres comandos w, uptime y cal que habíamos ejecutado de la siguiente manera.

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

Cuando el log_file se reproduce usando la información de tiempo, los comandos grabados se ejecutan y su salida se muestra al mismo tiempo que la salida original se mostró mientras se grababa.

Resumen

Estos dos comandos, script y scriptreplay, son fáciles de usar y ayudan mucho cuando necesitas ejecutar el mismo lote de comandos varias veces. Ayudan mucho en la administración de servidores que solo tienen una interfaz de línea de comandos para interactuar con su sistema. Espero que esta guía haya sido útil y si tiene algo que agregar o enfrenta un desafío mientras los usa, no dude en publicar un comentario.