Cómo clonar y reproducir una sesión bash

Muchas veces debemos realizar una tarea de mantenimiento en un servidor que involucra una cantidad de pasos, suele ser muy compleja, y a su vez requerir una cantidad importante de comandos. Si además se trata de un servidor crítico, debemos realizarla en el menor tiempo posible para no afectar a los usuarios y servicios. Como buen administrador de sistemas (sysadmin, en la jerga de los informáticos) uno debe documentar metódicamente todo lo que hace. He aquí el problema en estas situaciones, se debe realizar una tarea compleja en tiempo récord lo cual impide documentar mientras se ejecuta la tarea (lo que recomiendan todas las metodologías de gestión de tecnologías de la información). Es decir, no hay tiempo para cargar contenido en una Wiki, no hay tiempo para documentar. Al menos no hay tiempo para documentar mientras se ejecuta la tarea. Entonces no queda otra alternativa que documentar una vez finalizado, testeado y cerrado el caso, o peor, cuando tenga tiempo. El resultado es que la documentación termina siendo pobre, y muchas veces se pierden pasos y/o detalles importantes que afectan de forma crítica el éxito de la misión.

Lamentablemente esta situación se repite a diario en la mayoría de los colegas sysadmins, quienes están tan saturados de trabajo que directamente nunca tienen tiempo para documentar nada (la documentación no es una prioridad para la Gerencia, gran error). Luego la empresa (o al menos la gestión de IT) para la cual trabaja Pepe (suponiendo que Pepe es el sysadmin) se vuelve Pepe-dependiente. A esta altura ya me fui por las ramas, estoy detallando aspectos de una mala gestión de IT, en lugar del tema que presenta el título.

Volviendo al punto, este artículo describe el uso de una excelente herramienta que me ayudó a documentar en muchas ocasiones. La pregunta para afrontar el problema de forma exitosa es: "¿Cómo hago para guardar todo lo que escribí en la línea de comandos, incluyendo las salidas de los mismos, sin tener que copiar y pegar constantemente?". La respuesta es simple: utilizar el comando script.



El comando script guarda todo lo que se imprime en una terminal, es útil para estudiantes que necesitan un registro de una sesión interactiva como prueba de una asignación o tarea. Utilizando este comando es posible guardar una sesión para no pasar por alto ningún detalle importante al momento de realizar una documentación.

La forma más simple de utilizar script es la siguiente:

script -a sesion.txt

El parámetro -a indica el nombre del archivo donde se guardará la sesión. Para finalizar la grabación es posible utilizar el comando exit o presionar la combinación de teclas ^D (Ctrl+D). De esta forma podemos guardar un registro de todo lo que se imprimió en la línea de comandos para posterior análisis.

Si se desea revisar la sesión guardada es posible hacerlo, por ejemplo, mediante:

cat sesion.txt
more sesion.txt

Como con cualquier archivo de texto, podemos buscar patrones utilizando grep.

script también es útil para telecooperación. Es posible clonar una sesión interactiva para ser reproducida en otra terminal. Por ejemplo, si deseamos que otra persona en una terminal remota pueda ver nuestra sesión interactiva en tiempo real, se debe:

En la terminal remota

  • Abrir un puerto aleatorio y redirigir el contenido a un archivo (en background):
    nc -l 500 > sesion.txt &
  • Reproducir el archivo:
    tail -f sesion.txt

De esta forma, la terminal remota (aunque es posible realizar el mismo procedimiento para diferentes sesiones en una misma terminal, omitiendo el uso de netcat) está lista para ver en tiempo real la sesión interactiva que se va a "clonar". A continuación:

En la terminal local

  • Crear un archivo vacío y reenviar su contenido a la terminal remota (192.168.122.196 en el ejemplo), conectandose al puerto correspondiente (500):
    touch consola.txt
    tail -f consola.txt | nc 192.168.122.196 500 &
    
  • Ejecutar el comando script con la opción -fpara que vuelque la salida en cada escritura:
    script -fa consola.txt

A partir de este momento todo lo que se tipee, junto con las salidas, será reenviado a la terminal remota.

El siguiente video muestra un ejemplo del comando script en acción:



 

Suscribirse

    Registrate para recibir las novedades y artículos por correo electrónico.

Linuxito en G+