Generalmente, todos los administradores de Linux usan historia comando para rastrear qué comandos se ejecutaron en sesiones anteriores, pero hay una limitación del comando de historial que no almacena la salida del comando. Puede haber algunos escenarios en los que queramos verificar la salida de los comandos de la sesión anterior y queramos compararla con la sesión actual. Aparte de esto, hay algunas situaciones en las que estamos solucionando problemas en las cajas de producción de Linux y queremos guardar todas las actividades de la sesión de terminal para referencia futura, por lo que en tales casos, el comando de secuencia de comandos se vuelve útil.
Script es una herramienta de línea de comandos que se utiliza para capturar o grabar la actividad de las sesiones de la terminal del servidor Linux y luego la sesión grabada se puede reproducir usando el comando scriptreplay. En este artículo, demostraremos cómo instalar la herramienta de línea de comando de script y cómo registrar la actividad de la sesión del terminal del servidor Linux y luego veremos cómo se puede reproducir la sesión grabada usando scriptreplay mando.
Instalación de la herramienta Script en RHEL 7/ CentOS 7
El comando de secuencia de comandos lo proporciona el paquete rpm “util-linux”, en caso de que no esté instalado en su sistema CentOS 7/RHEL 7, ejecute el siguiente comando yum,
[[email protected] ~]# yum install util-linux -y
En RHEL 8 / CentOS 8
Ejecute el siguiente comando dnf para instalar la utilidad de script en el sistema RHEL 8 y CentOS 8,
[[email protected] ~]# dnf install util-linux -y
Instalación de la herramienta Script en sistemas basados en Debian (Ubuntu / Linux Mint)
Ejecute el siguiente comando apt-get para instalar la utilidad de secuencia de comandos
[email protected] ~]# apt-get install util-linux -y
Cómo usar la utilidad de script
El uso del comando de secuencia de comandos es sencillo, escriba el comando de secuencia de comandos en la terminal y luego presione Intro, comenzará a capturar las actividades de su sesión de terminal actual dentro de un archivo llamado «mecanografiado”
[[email protected] ~]# script Script started, file is typescript [[email protected] ~]#
Para dejar de registrar las actividades de la sesión, escriba el comando de salida y presione enter.
[[email protected] ~]# exit exit Script done, file is typescript [[email protected] ~]#
Sintaxis del comando Script:
~ ] # script {options} {file_name}
Diferentes opciones utilizadas en el comando de secuencia de comandos,
Comencemos a grabar su sesión de terminal de Linux ejecutando el comando de secuencia de comandos y luego ejecute un par de comandos como ‘w‘, ‘ruta -n‘ , ‘df-h‘ y ‘libre-h‘, el ejemplo se muestra a continuación
Como podemos ver arriba, los registros de sesión de terminal se guardan en el archivo «mecanografiado»
Ahora vea el contenido del archivo mecanografiado usando el comando cat / vi,
[[email protected] ~]# ls -l typescript -rw-r--r--. 1 root root 1861 Jun 21 00:50 typescript [[email protected] ~]#
Lo anterior confirma que todos los comandos que ejecutamos en la terminal que se han guardado dentro del archivo «mecanografiado»
Use el nombre de archivo personalizado en el comando de secuencia de comandos
Supongamos que queremos usar nuestro nombre de archivo personalizado para el comando de secuencia de comandos, así que especifique el nombre de archivo después del comando de secuencia de comandos, en el siguiente ejemplo estamos usando un nombre de archivo «sesión-registro-(fecha-hora-actual).txt»
[[email protected] ~]# script sessions-log-$(date +%d-%m-%Y-%T).txt Script started, file is sessions-log-21-06-2019-01:37:39.txt [[email protected] ~]#
Ahora ejecute los comandos y luego escriba exit,
[[email protected] ~]# exit exit Script done, file is sessions-log-21-06-2019-01:37:39.txt [[email protected] ~]#
Agregue la salida de los comandos al archivo de script
Supongamos que el comando de secuencia de comandos ya había registrado la salida de los comandos en un archivo llamado archivo session-log.txt y ahora queremos agregar la salida de los comandos de nuevas sesiones a este archivo, luego use «-aComando ” en el comando de secuencia de comandos
[[email protected] ~]# script -a sessions-log.txt Script started, file is sessions-log.txt [[email protected] ~]# xfs_info /dev/mapper/centos-root meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=2746624 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=10986496, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=5364, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [[email protected] ~]# exit exit Script done, file is sessions-log.txt [[email protected] ~]#
Para ver los registros de sesión actualizados, use «cat session-log.txt»
Capture la salida de comandos a un archivo de secuencia de comandos sin shell interactivo
Supongamos que queremos capturar la salida de los comandos en un archivo de script, luego usemos -C opción, el ejemplo se muestra a continuación,
[[email protected] ~]# script -c "uptime && hostname && date" root-session.txt Script started, file is root-session.txt 01:57:40 up 2:30, 3 users, load average: 0.00, 0.01, 0.05 linuxtechi Fri Jun 21 01:57:40 EDT 2019 Script done, file is root-session.txt [[email protected] ~]#
Ejecutar comando de script en modo silencioso
Para ejecutar el comando de script en modo silencioso, use -q opción, esta opción suprimirá el mensaje de secuencia de comandos iniciada y secuencia de comandos finalizada, el ejemplo se muestra a continuación,
[[email protected] ~]# script -c "uptime && date" -q root-session.txt 02:01:10 up 2:33, 3 users, load average: 0.00, 0.01, 0.05 Fri Jun 21 02:01:10 EDT 2019 [[email protected] ~]#
Registre la información de tiempo en un archivo y capture la salida de los comandos en un archivo separado, esto se puede lograr en el comando de secuencia de comandos pasando el archivo de tiempo (-momento), el ejemplo se muestra a continuación,
Sintaxis:
~ ]# script -t
[[email protected] ~]# script --timing=timing.txt session.log Script started, file is session.log [[email protected] ~]# uptime 02:27:59 up 3:00, 3 users, load average: 0.00, 0.01, 0.05 [[email protected] ~]# date Fri Jun 21 02:28:02 EDT 2019 [[email protected] ~]# free -h total used free shared buff/cache available Mem: 3.9G 171M 2.0G 8.6M 1.7G 3.3G Swap: 3.9G 0B 3.9G [[email protected] ~]# whoami root [[email protected] ~]# exit exit Script done, file is session.log [[email protected] ~]# [[email protected] ~]# ls -l session.log timing.txt -rw-r--r--. 1 root root 673 Jun 21 02:28 session.log -rw-r--r--. 1 root root 414 Jun 21 02:28 timing.txt [[email protected] ~]#
Reproducir actividad de sesión de terminal Linux registrada
Ahora reproduzca las actividades grabadas de la sesión de terminal usando el comando scriptreplay,
Nota: Scriptreplay también es proporcionado por el paquete rpm “util-linux”. El comando Scriptreplay requiere un archivo de temporización para funcionar.
[[email protected] ~]# scriptreplay --timing=timing.txt session.log
La salida del comando anterior sería algo como a continuación,
Registre todas las actividades de sesión de terminal de Linux del usuario
Hay algunos servidores Linux críticos para el negocio en los que queremos realizar un seguimiento de la actividad de todos los usuarios, por lo que esto se puede lograr mediante el comando de secuencia de comandos, coloque el siguiente contenido en el archivo /etc/profile,
[[email protected] ~]# vi /etc/profile …………………………………………………… if [ "x$SESSION_RECORD" = "x" ] then timestamp=$(date +%d-%m-%Y-%T) session_log=/var/log/session/session.$USER.$$.$timestamp SESSION_RECORD=started export SESSION_RECORD script -t -f -q 2>${session_log}.timing $session_log exit fi ……………………………………………………
Guardar y salir del archivo.
Cree el directorio de la sesión en la carpeta /var/log,
[[email protected] ~]# mkdir /var/log/session
Asigne los permisos a la carpeta de sesión,
[[email protected] ~]# chmod 777 /var/log/session/ [[email protected] ~]#
Ahora verifique si el código anterior funciona o no. Inicie sesión como usuario ordinario en el servidor Linux, en mi estoy usando el usuario pkumar,
~ ] # ssh [email protected] [email protected]'s password: [[email protected] ~]$ uptime 04:34:09 up 5:06, 3 users, load average: 0.00, 0.01, 0.05 [[email protected] ~]$ date Fri Jun 21 04:34:11 EDT 2019 [[email protected] ~]$ free -h total used free shared buff/cache available Mem: 3.9G 172M 2.0G 8.6M 1.7G 3.3G Swap: 3.9G 0B 3.9G [[email protected] ~]$ id uid=1001(pkumar) gid=1002(pkumar) groups=1002(pkumar) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [[email protected] ~]$ whoami pkumar [[email protected] ~]$ exit
Login as root and view user’s linux terminal session activity [[email protected] ~]# cd /var/log/session/ [[email protected] session]# ls -l | grep pkumar -rw-rw-r--. 1 pkumar pkumar 870 Jun 21 04:34 session.pkumar.19785.21-06-2019-04:34:05 -rw-rw-r--. 1 pkumar pkumar 494 Jun 21 04:34 session.pkumar.19785.21-06-2019-04:34:05.timing [[email protected] session]#
También podemos usar el comando scriptreplay para reproducir las actividades de la sesión de terminal del usuario,
[[email protected] session]# scriptreplay --timing session.pkumar.19785.21-06-2019-04:34:05.timing session.pkumar.19785.21-06-2019-04:34:05
Eso es todo de este tutorial, por favor comparta sus comentarios y comentarios en la sección de comentarios a continuación.