如何使用'script'和'scriptreplay'命令记录和重放Linux终端会话

在本指南中,我们将介绍如何在Linux中使用脚本和脚本播放命令,这些命令可以帮助您记录打印的命令及其输出

在本指南中,我们将看看如何使用Linux中的脚本和命令scriptreplay,可以帮助你给定的会话过程中记录打印在终端上的命令和它们的输出。

记录Linux终端命令

记录和重放Linux终端命令

history命令是一个伟大的命令行实用程序,可帮助用户存储用于先前的命令,虽然它不存储命令的输出。

不要错过: Showterm.io -一个Linux终端的录音工具

不要错过: 对Linux的8最好的桌面屏幕记录器

因此, 脚本命令派上用场,为您提供强大的功能,可以帮助你记录印制在您的终端上一LOG_FILE一切。 然后,您可以参考这个文件以后的情况下,你想从LOG_FILE查看命令的历史输出。

您也可以重播您通过使用定时信息使用scriptreplay命令记录的命令。

如何记录Linux终端使用脚本命令

在日志文件中的脚本命令存储终端的活动可以由用户,当没有通过用户提供的名字来命名的,默认的文件名,则使用打字稿

脚本命令的基本语法
# script [options] - -timing=timing_file log_filename

要启动Linux终端,类型的脚本记录,并添加日志文件名 ,如图所示。

howtoing@howtoing ~ $ script history_log.txt
Script started, file is history_log.txt

要停止脚本 ,键入exit,然后按[Enter]键

howtoing@howtoing ~ $ exit
Script done, file is history_log.txt

如果脚本无法写入命名的日志文件,则会显示错误。

例如,在下面的输出,该文件打字稿的权限不允许文件的读,写和执行不被任何用户或组。 当你没有一个日志文件名称运行脚本命令,它会尝试写入默认的文件,因此打字原稿显示错误。

howtoing@howtoing ~ $ ls -l typescript
--------- 1 ubuntu ubuntu 144 Sep 15 00:00 typescript
howtoing@howtoing ~ $ script
script: open failed: typescript: Permission denied
Terminated

使用脚本命令的示例

我有一个名为我在下面的示例日志文件script.log,你可以给你的文件不同的名称。

howtoing@howtoing ~ $ script script.log

现在尝试执行几个命令,以允许脚本在终端上记录已执行的命令。

howtoing@howtoing ~ $ 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           
howtoing@howtoing ~ $ 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
howtoing  tty8     :0               10:45    4:06m  7:40   0.36s x-session-manager
howtoing  pts/5    :0               13:42    4.00s  0.07s  0.00s script script.log
howtoing@howtoing ~ $ uptime
14:49:43 up  4:06,  2 users,  load average: 1.37, 1.56, 1.62
howtoing@howtoing ~ $ whoami
howtoing
howtoing@howtoing ~ $ echo 'using script'
using script
howtoing@howtoing ~ $ exit
exit
Script done, file is script.log

现在尝试查看日志文件“script.log”的所有记录的命令,当你查看日志,你意识到脚本还存储换行和退格。

howtoing@howtoing ~ $ vi script.log
示例输出
^[[0m^[[255D^[[01;32mhowtoing@howtoing^[[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;32mhowtoing@howtoing^[[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
howtoing  tty8     :0               10:45    4:06m  7:40   0.36s x-session-manager^M
howtoing  pts/5    :0               13:42    4.00s  0.07s  0.00s script script.log^M
^[[01;32mhowtoing@howtoing^[[01;34m ~ $^[[00m uptime^M
14:49:43 up  4:06,  2 users,  load average: 1.37, 1.56, 1.62^M
^[[01;32mhowtoing@howtoing^[[01;34m ~ $^[[00m whoami^M
howtoing^M
^[[01;32mhowtoing@howtoing^[[01;34m ~ $^[[00m echo ''^Hu'^Hs'^Hi'^Hn'^Hg'^H '^Hs'^Hc'^Hr'^Hi'^Hp'^Ht'^H^M
using script^M
^[[01;32mhowtoing@howtoing^[[01;34m ~ $^[[00m exit^M
exit^M
Script done on Wednesday 16 September 2015 02:49:59 PM IST
~                                                              

您可以使用-a选项追加日志文件或打字稿,保留以前的内容。

howtoing@howtoing ~ $ script -a script.log
Script started, file is script.log
howtoing@howtoing ~ $ date
Wed Sep 16 14:59:36 IST 2015
howtoing@howtoing ~ $ pwd
/home/howtoing
howtoing@howtoing ~ $ whereis script
script: /usr/bin/script /usr/bin/X11/script /usr/share/man/man1/script.1.gz
howtoing@howtoing ~ $ whatis script
script (1)           - make typescript of terminal session

查看脚本的内容,请登录使用-a选项追加后。

howtoing@howtoing ~ $ vi script.log
示例输出
^[[0m^[[255D^[[01;32mhowtoing@howtoing^[[01;34m ~ $^[[00m date^M
Wed Sep 16 14:59:36 IST 2015^M
^[[01;32mhowtoing@howtoing^[[01;34m ~ $^[[00m pwd^M
/home/howtoing^M
^[[01;32mhowtoing@howtoing^[[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;32mhowtoing@howtoing^[[01;34m ~ $^[[00m whatis script^M
script (1)           - make typescript of terminal session^M
^[[01;32mhowtoing@howtoing^[[01;34m ~ $^[[00m vi s^H^[[K^H^[[K^H^[[K^H^[[Kexit^M
exit^M

要记录比一个交互式shell会话等单个命令的结果,请使用-c选项。

howtoing@howtoing ~ $ script -c 'hostname' script.log
Script started, file is script.log
howtoing.com
Script done, file is script.log

如果你想脚本在一个安静模式下运行,那么你可以使用-q选项。 你不会看到显示脚本开始或退出的按摩。

howtoing@howtoing ~ $ script -c 'who'  -q  script.log
howtoing  tty8         2015-09-16 10:45 (:0)
howtoing  pts/5        2015-09-16 13:42 (:0)

要设置定时信息标准错误或者文件使用-timing选项。 当您要重新显示存储在log_file中的输出时,时间信息很有用。

让我们启动脚本并运行以下命令W, 正常运行时间CAL被记录下来。

howtoing@howtoing ~ $ script --timing=time.txt script.log
Script started, file is script.log
howtoing@howtoing ~ $ 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
howtoing  tty8     :0               10:45    4:26m  8:15   0.38s x-session-manager
howtoing  pts/5    :0               13:42    3.00s  0.09s  0.00s script --timing=time.txt script.log
howtoing@howtoing ~ $ uptime
15:09:36 up  4:26,  2 users,  load average: 1.43, 1.40, 1.48
howtoing@howtoing ~ $ 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    

您可以查看上面的时间命令script.logTIME.TXT文件。

howtoing@howtoing ~ $ vi script.log
示例输出
^[[0m^[[255D^[[01;32mhowtoing@howtoing^[[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
howtoing  tty8     :0               10:45    4:28m  8:20   0.38s x-session-manager^M
howtoing  pts/5    :0               13:42    5.00s  0.09s  0.00s script --timing=time.txt script.log^M
^[[01;32mhowtoing@howtoing^[[01;34m ~ $^[[00m uptime^M
15:12:07 up  4:28,  2 users,  load average: 1.29, 1.36, 1.45^M
^[[01;32mhowtoing@howtoing^[[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

现在查看TIME.TXT文件。

howtoing@howtoing ~ $ vi time.txt
示例输出
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
...

TIME.TXT文件有两列,第一列表示多少时间已过自上次显示和第二列中,显示已经围绕显示此时的字符数。

使用手册页和-help寻求更多的选择,并在使用脚本命令行实用程序的帮助。

使用scriptreplay使用计时信息重播脚本

scriptrepaly命令有助于在脚本命令中使用您的LOG_FILE重播的信息。

定时信息是通过在此情况下, 脚本命令和文件中使用的-timing =文件选项定义的是用脚本命令用于file.txt的

记住,你需要指定的脚本命令使用的LOG_FILE。

现在让我们来回放最后三个命令W, 正常运行时间和我们已经运行如下CAL。

howtoing@howtoing ~ $ scriptreplay --timing=time.txt script.log
在Linux中重放上次执行的命令

在Linux中重放上次执行的命令

LOG_FILE使用定时信息重放,记录在命令运行,并且在同时被记录的原始输出被显示的同时,显示它们的输出。

概要

这两个命令, 脚本scriptreplay易于使用,并且有很大的帮助,当你需要运行相同的批处理命令多次。 它们在管理仅具有与系统交互的命令行界面的服务器方面提供了很多帮助。 希望本指南很有用,如果您在使用它们时有任何问题需要补充或面对挑战,请随时发表评论。