1 | scriptreplay
|
2 | ===
|
3 |
|
4 | 重新播放终端会话的所有操作
|
5 |
|
6 | ## 补充说明
|
7 |
|
8 | **scriptreplay** 用于在终端中,根据 `script` 命令记录的终端数据文件和时间日志文件,重现当时用户的所有操作和命令的输出信息。简而言之,重现播放当时终端会话发生的一切信息,而不是重新运行一遍命令。例如,用户当时在输入某条命令时,字符的键入和删除也都会被重现。非常适合用于教程演示场合。而且,在机器 A 上面使用 `script` 命令记录终端操作,可以在机器 B 上面使用 `scriptreplay` 命令重新播放。
|
9 |
|
10 |
|
11 | ### 语法
|
12 |
|
13 | ```shell
|
14 | scriptreplay [options] [-t] timingfile [typescript [divisor]]
|
15 | ```
|
16 |
|
17 | ### 选项
|
18 |
|
19 | ```shell
|
20 | -t, --timing file # 记录时间日志的文件名称
|
21 | -s, --typescript file # 记录终端数据信息的日志文件名称
|
22 | -d, --divisor number # 表示倍速播放,把时间日志文件记录的时间间隔都除以 number
|
23 | # -d 2 表示播放速度是原始输入单条命令的速度的两倍,-d 0.1 表示播放单条命令的速度减慢 10 倍
|
24 | -m, --maxdelay number # 表示命令之间的最大延迟时间(单位是秒)
|
25 | # -m 2 表示 command.log 中存放的两条命令之间的间隔时间如果大于两秒,则按两秒执行播放
|
26 | -V, --version # 显示版本信息并退出
|
27 | -h, --help # 显示帮助文本并退出
|
28 | ```
|
29 |
|
30 | ### 参数
|
31 |
|
32 | * 时间日志文件:存储时间日志信息的文件名称
|
33 | * 终端数据文件:存储终端数据信息的文件名称
|
34 |
|
35 | ### 实例
|
36 |
|
37 | ```shell
|
38 | # 重新播放终端内容,默认第一个参数是时间日志,第二个参数是终端数据文件
|
39 | scriptreplay time.file command.log
|
40 | # 重新播放终端内容,播放快进速度为 1 ,命令之间最大延时为 2 秒
|
41 | scriptreplay -d 1 -m 2 -t time.file -s command.log
|
42 | ```
|
43 |
|
44 | **记录终端内容到文件**
|
45 |
|
46 | ```shell
|
47 | zfb@localhost:~$ script -t 2>time.file -a -f command.log
|
48 | Script started, file is command.log
|
49 | zfb@localhost:~$ echo "hello, world"
|
50 | hello, world
|
51 | zfb@localhost:~$ echo $(date "+%Y-%m-%d %H:%M:%S")
|
52 | 2020-12-23 20:48:46
|
53 | zfb@localhost:~$ echo "Bye"
|
54 | Bye
|
55 | zfb@localhost:~$ ls -al
|
56 | total 20
|
57 | drwxr-xr-x 2 zfb zfb 4096 Dec 23 20:48 .
|
58 | drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 ..
|
59 | -rw-r--r-- 1 zfb zfb 0 Dec 23 19:03 a.txt
|
60 | -rw-r--r-- 1 zfb zfb 12 Dec 23 19:04 b.txt
|
61 | -rw-r--r-- 1 zfb zfb 2744 Dec 23 20:49 command.log
|
62 | -rw-r--r-- 1 zfb zfb 790 Dec 23 20:49 time.file
|
63 | zfb@localhost:~$ exit
|
64 | Script done, file is command.log
|
65 | zfb@localhost:~$
|
66 | ```
|
67 |
|
68 | **重新播放终端内容**
|
69 |
|
70 | ```shell
|
71 | zfb@localhost:~$ scriptreplay -d 1 -m 2 -t time.file -s command.log
|
72 | zfb@localhost:~$ echo "hello, world"
|
73 | hello, world
|
74 | zfb@localhost:~$ echo $(date "+%Y-%m-%d %H:%M:%S")
|
75 | 2020-12-23 20:48:46
|
76 | zfb@localhost:~$ echo "Bye"
|
77 | Bye
|
78 | zfb@localhost:~$ ls -al
|
79 | total 20
|
80 | drwxr-xr-x 2 zfb zfb 4096 Dec 23 20:48 .
|
81 | drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 ..
|
82 | -rw-r--r-- 1 zfb zfb 0 Dec 23 19:03 a.txt
|
83 | -rw-r--r-- 1 zfb zfb 12 Dec 23 19:04 b.txt
|
84 | -rw-r--r-- 1 zfb zfb 2744 Dec 23 20:49 command.log
|
85 | -rw-r--r-- 1 zfb zfb 790 Dec 23 20:49 time.file
|
86 | zfb@localhost:~$ exit
|
87 |
|
88 | zfb@localhost:~$
|
89 | ```
|
90 |
|
91 | 其中,只有命令`scriptreplay -d 1 -m 2 -t time.file -s command.log`是用户输入,其他均为自动呈现(且视觉效果与真实用户的操作一致)。通过查看上面输出的时间`2020-12-23 20:48:46`,可以证明,这是重新播放当时的记录,而非重新执行一遍命令。也就是说,可以把`time.file`和`command.log`文件移动到任意一台支持`scriptreplay`命令的机器上,都可以动态重现命令输入与终端回显。
|
92 |
|
93 |
|