scriptreplay 用于在终端中,根据 script 命令记录的终端数据文件和时间日志文件,重现当时用户的所有操作和命令的输出信息。简而言之,重现播放当时终端会话发生的一切信息,而不是重新运行一遍命令。例如,用户当时在输入某条命令时,字符的键入和删除也都会被重现。非常适合用于教程演示场合。而且,在机器 A 上面使用 script 命令记录终端操作,可以在机器 B 上面使用 scriptreplay 命令重新播放。
如何使用脚本命令录制 Linux 终端
这
script
命令将终端活动存储在可由用户命名的日志文件中,当用户未提供名称时,默认文件名,typescript
用来。
script 命令的基本语法
代码语言:javascript复制# script [options] - -timing=timing_file log_filename
代码语言:javascript复制要开始录制 Linux 终端,请键入
script
并添加日志filename
> rumenz@local ~ $ script history_log.txt
Script started, file is history_log.txt
代码语言:javascript复制停止
script
, 类型exit
并按下[Enter]
.
> rumenz@local ~ $ exit
Script done, file is history_log.txt
代码语言:javascript复制如果脚本无法写入指定的日志文件,则会显示错误。
例如,在下面的输出中,文件的权限
typescript
不允许非任何用户或组读取、写入和执行文件。当你在没有日志文件名的情况下运行脚本命令时,它会尝试写入默认文件,typescript
因此显示错误。
> rumenz@local ~ $ ls -l typescript
--------- 1 rumenz rumenz 144 Sep 15 00:00 typescript
> rumenz@local ~ $ script
script: open failed: typescript: Permission denied
Terminated
使用脚本命令的示例
代码语言:javascript复制我已经命名了我的日志文件
script.log
在下面的示例中,你可以为文件指定不同的名称。
> rumenz@local ~ $ script script.log
//开始执行命令
> rumenz@local ~ $ cal
October 2021
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
31
> rumenz@local ~ $ w
14:49:40 up 4:06, 2 users, load average: 37, 56, 62
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
rumenz tty8 :0 10:45 4:06m 7:40 36s x-session-manager
rumenz pts/5 :0 13:42 00s 07s 00s script script.log
> rumenz@local ~ $ uptime
14:49:43 up 4:06, 2 users, load average: 37, 56, 62
> rumenz@local ~ $ whoami
rumenz
> rumenz@local ~ $ echo 'using script'
using script
> rumenz@local ~ $ exit
exit
Script done, file is script.log
代码语言:javascript复制现在尝试查看日志文件
script.log
对于所有记录的命令,当你查看日志时,你会意识到该脚本还存了换行符和退格符。
> rumenz@local ~ $ vi script.log
输出
代码语言:javascript复制^[[0m^[[255D^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m cal^M
September 2021 ^M
Su Mo Tu We Th Fr Sa ^M
1 2 ^M
3 4 5 6 7 8 9 ^M
10 11 12 13 14 15 16 ^M
17 18 19 20 21 22 23 ^M
24 25 26 27 28 29 30 ^M
31 ^M
^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m w^M
14:49:40 up 4:06, 2 users, load average: 37, 56, 62^M
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT^M
rumenz tty8 :0 10:45 4:06m 7:40 36s x-session-manager^M
rumenz pts/5 :0 13:42 00s 07s 00s script script.log^M
^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m uptime^M
14:49:43 up 4:06, 2 users, load average: 37, 56, 62^M
^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m whoami^M
rumenz^M
^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m echo ''^Hu'^Hs'^Hi'^Hn'^Hg'^H '^Hs'^Hc'^Hr'^Hi'^Hp'^Ht'^H^M
using script^M
^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m exit^M
exit^M
Script done on Sunday 10 October 2021 14:49:59 PM IST
~
代码语言:javascript复制你可以使用
-a
附加日志文件或打字稿的选项,保留先前的内容。
> rumenz@local ~ $ script -a script.log
Script started, file is script.log
> rumenz@local ~ $ date
Sun Oct 10 15:04:33 CST 2021
> rumenz@local ~ $ pwd
/home/rumenz
> rumenz@local ~ $ whereis script
script: /usr/bin/script /usr/bin/X11/script /usr/share/man/man1/script.gz
> rumenz@local ~ $ whatis script
script (1) - make typescript of terminal session
代码语言:javascript复制查看脚本内容,使用后登录
-a
附加它的选项。
> rumenz@local ~ $ vi script.log
输出
代码语言:javascript复制^[[0m^[[255D^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m date^M
Sun Oct 10 15:04:33 CST 2021^M
^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m pwd^M
/home/rumenz^M
^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m whre^H^[[K^H^[[Kereis script^M
script: /usr/bin/script /usr/bin/X11/script /usr/share/man/man1/script.gz^M
^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m whatis script^M
script (1) - make typescript of terminal session^M
^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m vi s^H^[[K^H^[[K^H^[[K^H^[[Kexit^M
exit^M
代码语言:javascript复制要记录除交互式 shell 会话之外的单个命令的结果,请使用
-c
选项。
> rumenz@local ~ $ script -c 'hostname' script.log
Script started, file is script.log
rumenz.com
Script done, file is script.log
代码语言:javascript复制如果你希望脚本以安静模式运行,则可以使用
-q
选项。你不会看到显示脚本正在启动或退出的消息。
> rumenz@local ~ $ script -c 'who' -q script.log
rumenz tty8 2021-10-10 10:45 (:0)
rumenz pts/5 2021-10-10 13:42 (:0)
代码语言:javascript复制要将计时信息设置为标准错误或文件,请使用
–timing
选项。当你想要重新显示存储在 log_file 中的输出时,计时信息很有用。启动脚本并运行以下命令
w
,uptime
和cal
> rumenz@local ~ $ script --timing=time.txt script.log
Script started, file is script.log
> rumenz@local ~ $ w
15:09:31 up 4:26, 2 users, load average: 38, 39, 47
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
rumenz tty8 :0 10:45 4:26m 8:15 38s x-session-manager
rumenz pts/5 :0 13:42 00s 09s 00s script --timing=time.txt script.log
> rumenz@local ~ $ uptime
15:09:36 up 4:26, 2 users, load average: 43, 40, 48
> rumenz@local ~ $ cal
October 2021
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
31
代码语言:javascript复制你可以查看
script.log
和time.txt
上面的计时命令的文件。
> rumenz@local ~ $ vi script.log
输出
代码语言:javascript复制^[[0m^[[255D^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m w^M
15:12:05 up 4:28, 2 users, load average: 31, 37, 45^M
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT^M
rumenz tty8 :0 10:45 4:28m 8:20 38s x-session-manager^M
rumenz pts/5 :0 13:42 00s 09s 00s script --timing=time.txt script.log^M
^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m uptime^M
15:12:07 up 4:28, 2 users, load average: 29, 36, 45^M
^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m cal^M
September 2021 ^M
Su Mo Tu We Th Fr Sa ^M
1 2 ^M
3 4 5 6 7 8 9 ^M
10 11 12 13 14 15 16 ^M
17 18 19 20 21 22 23 ^M
24 25 26 27 28 29 30 ^M
31 ^M
代码语言:javascript复制现在查看
time.txt
文件。
> rumenz@local ~ $ vi time.txt
输出
代码语言:javascript复制259669 306
037680 829
000006 2
000002 100
000002 2
000002 102
000019 202
000004 2
000002 102
000015 100
000002 2
000003 2
000002 99
000011 2
000003 82
...
这
time.txt
文件有两列,第一列显示自上次显示以来经过的时间,第二列显示这次显示的字符数。
使用 scriptreplay 使用计时信息重放脚本
代码语言:javascript复制这
scriptreplay
命令有助于重播你的信息log_file
记录的script
命令。时间信息由
-timing=file
选项与script
命令和file
在这种情况下是file.txt
与脚本命令一起使用。请记住,你需要指定
log_file
你与脚本命令一起使用。重放最后三个命令
w
,uptime
和cal
我们运行如下。
> rumenz@local ~ $ scriptreplay --timing=time.txt script.log
log_file
使用时间信息重放,记录的命令被运行并且它们的输出在记录时显示原始输出的同时显示。
概括
这两个命令,
script
和scriptreplay
当你需要多次运行同一批命令时,易于使用并提供很多帮助。它们在管理仅具有用于与系统交互的命令行界面的服务器方面有很大帮助。
相关文章
Linux之date命令