Búsqueda de sitios web

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 registrar comandos y su salida impresa en su terminal durante un período determinado. sesión.

El comando de historial es una excelente utilidad de línea de comandos que ayuda a los usuarios a almacenar el comando anterior utilizado, aunque no almacena el resultado de un comando.

No te pierdas: Showterm.io: una herramienta de grabación de terminales de Linux

No te pierdas: 8 mejores grabadores de pantalla de escritorio para Linux

Por lo tanto, el comando script resulta útil para proporcionarle una potente funcionalidad que le ayuda a registrar todo lo que se imprime en su terminal en un log_file. Luego podrá consultar este archivo más adelante en caso de que desee ver el resultado de un comando en el historial desde el log_file.

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

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

El comando script almacena las actividades del terminal en un archivo de registro que puede ser nombrado por un usuario; cuando un usuario no proporciona un nombre, se utiliza el nombre de archivo predeterminado, typescript. .

Sintaxis básica del comando script

script [options] - -timing=timing_file log_filename

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


tecmint@tecmint ~ $ script history_log.txt

Script started, file is history_log.txt

Para detener el script, escriba salir y presione [Entrar].


tecmint@tecmint ~ $ 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 siguiente, los permisos del archivo typecript 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 typescript muestra un error.


tecmint@tecmint ~ $ ls -l typescript

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

tecmint@tecmint ~ $ script

script: open failed: typescript: Permission denied
Terminated

Ejemplos de uso del comando script

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


tecmint@tecmint ~ $ script script.log

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


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

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


tecmint@tecmint ~ $ vi script.log
Salida de muestra

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

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


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

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


tecmint@tecmint ~ $ vi script.log
Salida de muestra

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

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


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

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

Si desea que el script se ejecute en modo silencioso, puede utilizar la opción -q. No verá ningún mensaje que muestre que el script se está iniciando o saliendo.


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)

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

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


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    

Puede ver los archivos script.log y time.txt para el comando de sincronización anterior.


tecmint@tecmint ~ $ vi script.log
Salida de muestra

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

Ahora vea el archivo time.txt.


tecmint@tecmint ~ $ vi time.txt
Salida de muestra

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 visualización y la segunda columna muestra la cantidad 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 del script.

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

El comando scriptreplay ayuda a reproducir la información en su log_file registrada por el comando script.

La información de tiempo se define mediante la opción -timing=file utilizada con el comando script y file en este caso es file.txt. que se usó con el comando de script.

Recuerde que debe especificar el log_file que utilizó con el comando del script.

Ahora reproduzcamos los últimos tres comandos w, uptime y cal que ejecutamos de la siguiente manera.


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

Cuando el log_file se reproduce utilizando la información de tiempo, los comandos grabados se ejecutan y su salida se muestra al mismo tiempo que se mostraba la salida original 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 a administrar servidores que sólo tienen una interfaz de línea de comandos para interactuar con su sistema. Espero que esta guía haya sido útil y si tienes algo que agregar o enfrentas un desafío mientras las usas, no dudes en publicar un comentario.