Usando el comando script en Linux para registrar la actividad de la linea de comandos

0
3657

El comando script, no solo hace un registro de los comandos que ejecuta, sino que también le permite guardar la salida generada para que pueda examinarla más tarde o convertir fácilmente sus secuencias de comandos en secuencias de comandos.

El comando script de Linux ha existido durante años y proporciona un servicio simple pero útil. Le permite registrar la actividad de la línea de comandos, tanto de entrada como de salida. Esto puede ser muy útil para solucionar problemas o verificar lo que se hizo más tarde al revisar los comandos que se ejecutaron junto con su salida.

Incluso si ha utilizado el comando script de vez en cuando, ofrece más opciones de las que muchos de nosotros creemos. En esta publicación, veremos el uso más simple del script y algunas de las opciones que pueden hacerlo aún más útil.

La forma más fácil de usar el comando script es simplemente escribir “script” en la terminal y presionar ^ d cuando desee detener la grabación. La salida, por defecto, se guardará en un archivo llamado “typescript”. Verá el nombre del archivo que se utiliza en la primera línea de salida.

$ script
Script started, output log file is 'typescript'.  <== file name
$ who
shs      pts/0        2021-11-16 12:10 (192.168.0.8)
$                                                 <== after ^d
exit
Script done.

Especifique un nombre de archivo

Puede proporcionar un nombre más significativo si usa un comando como el que se muestra a continuación que agrega el nombre del archivo al comando:

$ script updates
Script started, output log file is 'updates'.     <== file name
$ echo running commands
running commands
$                                                 <== after ^d
Exit

Script done on 2021-11-16 13:30:19-05:00 [COMMAND_EXIT_CODE="0"]

El contenido del archivo de actualizaciones se vería así:

$ cat updates
Script started on 2021-11-16 13:35:08-05:00 [TERM="xterm" TTY="/dev/pts/4" COLUMNS="80" LINES="24"]
$ echo running commands
running commands
$
Exit

Script done on 2021-11-16 13:35:25-05:00 [COMMAND_EXIT_CODE="0"]

Tenga en cuenta que el archivo utilizado para registrar la actividad de la sesión incluye no solo los comandos escritos y la salida generada, sino también la hora y la fecha en que comenzó y terminó la grabación del archivo.

Agregar salida a un archivo existente

Si desea agregar la grabación de la actividad de la sesión a un archivo existente, puede usar la opción -a (o –append ).

$ script -a updates

Ejecutar de forma no interactiva

Cuando usa la opción -c (o –command ), el comando de secuencia de comandos ejecuta el comando dado y de forma no interactiva.

Para ejecutar un solo comando y registrar la interacción, puede especificar el comando como se muestra a continuación que usa la opción -c (o –command ). Tenga en cuenta que se necesitan comillas si el comando requiere más de una cadena. Las horas de inicio y finalización no se incluyen en la salida cuando se utiliza esta opción.

$ script -c date
Script started, output log file is 'typescript'.
Thu Nov 18 03:50:06 PM EST 2021
Script done.
$
$ script -c "find . -name loop -print"
Script started, output log file is 'typescript'.
./bin/xtra/loop
./bin/loop
./loop
./private/loop
Script done.

También puede pasar una línea de comando a un script como este:

$ echo date | script
Script started, output log file is 'typescript'.
date
$ date
Tue Nov 16 02:02:10 PM EST 2021
$
exit
Script done.

Ejecutar un script de shell

En el siguiente ejemplo, usamos la opción -c para ejecutar un script y guardar la interacción en un archivo llamado “myloop”.

$ script -c bin/loop2 myloop
Script started, output log file is 'myloop'.
1
2
3
4
Script done.

Separando la entrada de la salida

En algunos sistemas Linux (como Fedora), el comando de script también hace posible separar la entrada de la salida en la grabación de su sesión usando las opciones -I (o –log-in) y -O (o –log-out). Esto podría permitirle convertir los comandos guardados en un script más fácilmente, ya que estarán en un archivo sin la salida del comando.

$ script -q -I in -O out
$ echo Hello, World!
Hello, World!

La -I  (“i” mayúscula) especifica el archivo para la entrada y la -O  (“o” mayúscula) el archivo para la salida. Consulte la página del manual del script para ver qué opciones están disponibles para usted.

La opción -q (o –quiet ) evita que las horas de inicio y finalización se muestren en la salida estándar (generalmente la ventana de su terminal).

El archivo de entrada se vería así:

$ cat in
Script started on 2021-11-18 16:01:58-05:00 [TERM="xterm" TTY="/dev/pts/0" COLUMNS="80" LINES="24"]
echo Hello, World!
Script done on 2021-11-18 16:02:06-05:00 [COMMAND_EXIT_CODE="0"]

El archivo de salida se vería así:

$ cat out
Script started on 2021-11-18 16:01:58-05:00 [TERM="xterm" TTY="/dev/pts/0" COLUMNS="80" LINES="24"]
$ echo Hello, World!
Hello, World!
$
exit

Script done on 2021-11-18 16:02:06-05:00 [COMMAND_EXIT_CODE="0"]

Comprobando la versión del script

Puede mostrar la versión del script que está ejecutando así:

$ script -V
script from util-linux 2.36.2

Obteniendo ayuda

Puede leer la página de manual del comando de secuencia de comandos o solicitar explicaciones sobre la sintaxis y las opciones del comando de secuencia de comandos con el comando que se muestra a continuación.

$ script -h

Usage:
 script [options] [file]

Make a typescript of a terminal session.

Options:
 -I, --log-in <file>           log stdin to file
 -O, --log-out <file>          log stdout to file (default)
 -B, --log-io <file>           log stdin and stdout to file

 -T, --log-timing <file>       log timing information to file
 -t[<file>], --timing[=<file>] deprecated alias to -T (default file is stderr)
 -m, --logging-format <name>   force to 'classic' or 'advanced' format

 -a, --append                  append to the log file
 -c, --command <command>       run command rather than interactive shell
 -e, --return                  return exit code of the child process
 -f, --flush                   run flush after each write
     --force                   use output file even when it is a link
 -E, --echo <when>             echo input (auto, always or never)
 -o, --output-limit <size>     terminate if output files exceed size
 -q, --quiet                   be quiet

 -h, --help                    display this help
 -V, --version                 display version

For more details see script(1).

Finalmente

El comando script es muy útil cuando desea recordar, revisar o volver a ejecutar una secuencia de comandos y detalles de salida en un sistema Linux. Si bien el comando history registra los comandos que ingresa, el comando script es más completo al permitirle revisar la salida del comando, así como los comandos que se ejecutaron.