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.