前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux中使用script和scriptreplay进行命令操作录制与重放

linux中使用script和scriptreplay进行命令操作录制与重放

作者头像
玖柒的小窝
修改2021-10-22 10:45:55
8170
修改2021-10-22 10:45:55
举报
文章被收录于专栏:各类技术文章~

scriptreplay 用于在终端中,根据 script 命令记录的终端数据文件和时间日志文件,重现当时用户的所有操作和命令的输出信息。简而言之,重现播放当时终端会话发生的一切信息,而不是重新运行一遍命令。例如,用户当时在输入某条命令时,字符的键入和删除也都会被重现。非常适合用于教程演示场合。而且,在机器 A 上面使用 script 命令记录终端操作,可以在机器 B 上面使用 scriptreplay 命令重新播放。

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

script 命令将终端活动存储在可由用户命名的日志文件中,当用户未提供名称时,默认文件名, typescript 用来。

script 命令的基本语法
代码语言:javascript
复制
# script [options] - -timing=timing_file log_filename

要开始录制 Linux 终端,请键入 script 并添加日志 filename

代码语言:javascript
复制
> rumenz@local ~ $ script history_log.txtScript started, file is history_log.txt

停止 script, 类型 exit 并按下 [Enter].

代码语言:javascript
复制
> rumenz@local ~ $ exitScript done, file is history_log.txt

如果脚本无法写入指定的日志文件,则会显示错误。 例如,在下面的输出中,文件的权限 typescript不允许非任何用户或组读取、写入和执行文件。当你在没有日志文件名的情况下运行脚本命令时,它会尝试写入默认文件,typescript 因此显示错误。

代码语言:javascript
复制
> rumenz@local ~ $ ls -l typescript--------- 1 rumenz rumenz 144 Sep 15 00:00 typescript> rumenz@local ~ $ scriptscript: open failed: typescript: Permission deniedTerminated
使用脚本命令的示例

我已经命名了我的日志文件 script.log 在下面的示例中,你可以为文件指定不同的名称。

代码语言:javascript
复制
> 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  910 11 12 13 14 15 1617 18 19 20 21 22 2324 25 26 27 28 29 3031         > rumenz@local ~ $ w 14:49:40 up  4:06,  2 users,  load average: 37, 56, 62USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHATrumenz  tty8     :0               10:45    4:06m  7:40   36s x-session-managerrumenz  pts/5    :0               13:42    00s  07s  00s script script.log> rumenz@local ~ $ uptime14:49:43 up  4:06,  2 users,  load average: 37, 56, 62> rumenz@local ~ $ whoamirumenz> rumenz@local ~ $ echo 'using script'using script> rumenz@local ~ $ exitexitScript done, file is script.log

现在尝试查看日志文件script.log 对于所有记录的命令,当你查看日志时,你会意识到该脚本还存了换行符和退格符。

代码语言:javascript
复制
> rumenz@local ~ $ vi script.log
输出
代码语言:javascript
复制
^[[0m^[[255D^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m cal^M   September 2021     ^MSu Mo Tu We Th Fr Sa  ^M                1  2  ^M 3  4  5  6  7  8  9  ^M10 11 12 13 14 15 16  ^M17 18 19 20 21 22 23  ^M24 25 26 27 28 29 30  ^M31                    ^M^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m w^M 14:49:40 up  4:06,  2 users,  load average: 37, 56, 62^MUSER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT^Mrumenz  tty8     :0               10:45    4:06m  7:40   36s x-session-manager^Mrumenz  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^Mrumenz^M^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m echo ''^Hu'^Hs'^Hi'^Hn'^Hg'^H '^Hs'^Hc'^Hr'^Hi'^Hp'^Ht'^H^Musing script^M^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m exit^Mexit^MScript done on Sunday 10 October 2021 14:49:59 PM IST~

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

代码语言:javascript
复制
> rumenz@local ~ $ script -a script.logScript started, file is script.log> rumenz@local ~ $ dateSun Oct 10 15:04:33 CST 2021> rumenz@local ~ $ pwd/home/rumenz> rumenz@local ~ $ whereis scriptscript: /usr/bin/script /usr/bin/X11/script /usr/share/man/man1/script.gz> rumenz@local ~ $ whatis scriptscript (1)           - make typescript of terminal session

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

代码语言:javascript
复制
> rumenz@local ~ $ vi script.log
输出
代码语言:javascript
复制
^[[0m^[[255D^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m date^MSun 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^Mscript: /usr/bin/script /usr/bin/X11/script /usr/share/man/man1/script.gz^M^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m whatis script^Mscript (1)           - make typescript of terminal session^M^[[01;32m> rumenz@local^[[01;34m ~ $^[[00m vi s^H^[[K^H^[[K^H^[[K^H^[[Kexit^Mexit^M

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

代码语言:javascript
复制
> rumenz@local ~ $ script -c 'hostname' script.logScript started, file is script.logrumenz.comScript done, file is script.log

如果你希望脚本以安静模式运行,则可以使用 -q选项。你不会看到显示脚本正在启动或退出的消息。

代码语言:javascript
复制
> rumenz@local ~ $ script -c 'who'  -q  script.logrumenz  tty8         2021-10-10 10:45 (:0)rumenz  pts/5        2021-10-10 13:42 (:0)

要将计时信息设置为标准错误或文件,请使用 –timing选项。当你想要重新显示存储在 log_file 中的输出时,计时信息很有用。 启动脚本并运行以下命令 w, uptimecal

代码语言:javascript
复制
> rumenz@local ~ $ script --timing=time.txt script.logScript started, file is script.log> rumenz@local ~ $ w 15:09:31 up  4:26,  2 users,  load average: 38, 39, 47USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHATrumenz  tty8     :0               10:45    4:26m  8:15   38s x-session-managerrumenz  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  910 11 12 13 14 15 1617 18 19 20 21 22 2324 25 26 27 28 29 3031

你可以查看 script.logtime.txt 上面的计时命令的文件。

代码语言:javascript
复制
> 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^MUSER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT^Mrumenz  tty8     :0               10:45    4:28m  8:20   38s x-session-manager^Mrumenz  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     ^MSu Mo Tu We Th Fr Sa  ^M                1  2  ^M 3  4  5  6  7  8  9  ^M10 11 12 13 14 15 16  ^M17 18 19 20 21 22 23  ^M24 25 26 27 28 29 30  ^M31                    ^M

现在查看 time.txt 文件。

代码语言:javascript
复制
> rumenz@local ~ $ vi time.txt
输出
代码语言:javascript
复制
259669 306037680 829000006 2000002 100000002 2000002 102000019 202000004 2000002 102000015 100000002 2000003 2000002 99000011 2000003 82...

time.txt 文件有两列,第一列显示自上次显示以来经过的时间,第二列显示这次显示的字符数。

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

scriptreplay 命令有助于重播你的信息 log_file 记录的 script 命令。 时间信息由 -timing=file 选项与 script 命令和 file 在这种情况下是 file.txt 与脚本命令一起使用。 请记住,你需要指定 log_file你与脚本命令一起使用。 重放最后三个命令 w, uptimecal 我们运行如下。

代码语言:javascript
复制
> rumenz@local ~ $ scriptreplay --timing=time.txt script.log

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

概括

这两个命令, scriptscriptreplay当你需要多次运行同一批命令时,易于使用并提供很多帮助。它们在管理仅具有用于与系统交互的命令行界面的服务器方面有很大帮助。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何使用脚本命令录制 Linux 终端
    • 使用脚本命令的示例
      • 输出
      • 输出
      • 输出
      • 输出
  • 使用 scriptreplay 使用计时信息重放脚本
  • 概括
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档