Recherche de site Web

Comment enregistrer et rejouer des sessions de terminal Linux à l'aide des commandes « script » et « scriptreplay »


Dans ce guide, nous allons voir comment utiliser des commandes script et scriptreplay sous Linux qui peuvent vous aider à enregistrer les commandes et leur sortie imprimée sur votre terminal au cours d'une période donnée. session.

La commande history est un excellent utilitaire de ligne de commande qui aide les utilisateurs à stocker la commande précédente utilisée, bien qu'elle ne stocke pas le résultat d'une commande.

Ne manquez pas : Showterm.io – Un outil d'enregistrement de terminal Linux

Ne manquez pas : 8 meilleurs enregistreurs d'écran de bureau pour Linux

Par conséquent, la commande script est pratique pour vous fournir une fonctionnalité puissante qui vous aide à enregistrer tout ce qui est imprimé sur votre terminal dans un fichier_log. Vous pourrez ensuite vous référer à ce fichier plus tard au cas où vous souhaiteriez afficher le résultat d'une commande dans l'historique à partir du log_file.

Vous pouvez également rejouer les commandes que vous avez enregistrées à l'aide de la commande scriptreplay en utilisant des informations de synchronisation.

Comment enregistrer un terminal Linux à l'aide d'une commande de script

La commande script stocke les activités du terminal dans un fichier journal qui peut être nommé par un utilisateur. Lorsqu'un nom n'est pas fourni par un utilisateur, le nom de fichier par défaut, typescript est utilisé. .

Syntaxe de base de la commande de script

script [options] - -timing=timing_file log_filename

Pour démarrer l'enregistrement du terminal Linux, tapez script et ajoutez le journal filename comme indiqué.


tecmint@tecmint ~ $ script history_log.txt

Script started, file is history_log.txt

Pour arrêter le script, tapez exit et appuyez sur [Entrée].


tecmint@tecmint ~ $ exit

Script done, file is history_log.txt

Si le script ne peut pas écrire dans le fichier journal nommé, il affiche une erreur.

Par exemple, dans la sortie ci-dessous, les autorisations du fichier typescript n'autorisent pas la lecture, l'écriture et l'exécution du fichier par aucun utilisateur ou groupe. Lorsque vous exécutez la commande de script sans nom de fichier journal, elle tente d'écrire dans le fichier par défaut, typescript, affichant ainsi une erreur.


tecmint@tecmint ~ $ ls -l typescript

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

tecmint@tecmint ~ $ script

script: open failed: typescript: Permission denied
Terminated

Exemples d'utilisation de la commande script

J'ai nommé mon fichier journal script.log dans l'exemple ci-dessous, vous pouvez donner un nom différent à votre fichier.


tecmint@tecmint ~ $ script script.log

Essayez maintenant d'exécuter quelques commandes pour permettre au script d'enregistrer les commandes exécutées sur le 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

Essayez maintenant d'afficher le fichier journal « script.log » pour toutes les commandes enregistrées. Pendant que vous affichez le journal, vous réalisez que le script stocke également les sauts de ligne et les espaces arrière.


tecmint@tecmint ~ $ vi script.log
Exemple de sortie

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

Vous pouvez utiliser l'option -a pour ajouter le fichier journal ou le texte dactylographié, en conservant le contenu précédent.


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

Affichez le contenu du script, connectez-vous après avoir utilisé l'option -a pour l'ajouter.


tecmint@tecmint ~ $ vi script.log
Exemple de sortie

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

Pour enregistrer les résultats d'une seule commande autre qu'une session shell interactive, utilisez l'option -c.


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

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

Si vous souhaitez que le script s'exécute en mode silencieux, vous pouvez utiliser l'option -q. Vous ne verrez pas de message indiquant que le script démarre ou se termine.


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)

Pour définir les informations de synchronisation sur une erreur standard ou un fichier, utilisez l'option –timing. Les informations de synchronisation sont utiles lorsque vous souhaitez réafficher la sortie stockée dans le fichier journal.

Démarrons le script et exécutons les commandes suivantes w, uptime et cal à enregistrer.


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    

Vous pouvez afficher les fichiers script.log et time.txt pour la commande de synchronisation ci-dessus.


tecmint@tecmint ~ $ vi script.log
Exemple de sortie

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

Affichez maintenant le fichier time.txt.


tecmint@tecmint ~ $ vi time.txt
Exemple de sortie

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
...

Le fichier time.txt comporte deux colonnes, la première colonne indique le temps écoulé depuis le dernier affichage et la deuxième colonne indique le nombre de caractères qui ont été affichés cette fois-ci.

Utilisez la page de manuel et –help pour rechercher plus d'options et de l'aide sur l'utilisation de l'utilitaire de ligne de commande de script.

Utilisation de scriptreplay pour rejouer des scripts à l'aide d'informations de synchronisation

La commande scriptreplay permet de relire les informations de votre log_file enregistrées par la commande script.

Les informations de synchronisation sont définies par l'option -timing=file utilisée avec la commande script et file dans ce cas est file.txt qui a été utilisé avec la commande de script .

N'oubliez pas que vous devez spécifier le log_file que vous avez utilisé avec la commande de script.

Rejouons maintenant les trois dernières commandes w, uptime et cal que nous avions exécutées comme suit.


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

Lorsque le log_file est relu à l'aide des informations de synchronisation, les commandes enregistrées sont exécutées et leur sortie est affichée en même temps que la sortie d'origine était affichée lors de l'enregistrement.

Résumé

Ces deux commandes, script et scriptreplay sont faciles à utiliser et sont très utiles lorsque vous devez exécuter plusieurs fois le même lot de commandes. Ils aident beaucoup dans la gestion des serveurs qui n'ont qu'une interface de ligne de commande pour interagir avec votre système. J'espère que ce guide vous a été utile et si vous avez quelque chose à ajouter ou si vous rencontrez un défi lors de leur utilisation, n'hésitez pas à poster un commentaire.