如何使用“script”记录Linux终端命令

script
命令允许您在终端中记录和重放活动。当您想创建已执行步骤的参考或正在创建教程供其他人遵循时,它会很有帮助。
script
输出您运行的所有命令的打字稿。它的工作原理是将您放入一个记录您执行的所有内容的子外壳中。当您离开 shell 时,您的会话将保存为纯文本。这使得 script
比重定向的输入流更可靠。
基本用法
script
命令可以在没有任何参数的情况下运行:
script
一个新的捕获会话将开始。您的终端会话将保存到工作目录中的 ./typescript
中。您可以通过给 script
一个参数来指定一个不同的文件:
script example_session
使用您的 shell 执行您要记录的命令序列。完成后,按 Ctrl+D
或键入 exit
退出子 shell。您将返回到主 shell 会话。
现在您可以检查已创建的会话日志:
cat example_session
您会看到 script
会话的输出散布在方括号中的注释中。 script
使用这些注释来记录有关终端本身和其中发生的事件的详细信息。
由于日志文件是纯文本,您可以在您喜欢的编辑器中自由操作它们。只需剪掉您不想保留或其他人不应该看到的任何线条。
如果您的会话无意中输出了潜在的敏感信息,或者您想从日志中删除无关字符,这将很有用。 script
记录您终端中发生的一切,包括退格键、换行符和控制字符,其中一些可能在最终打字稿中不需要。
script
在会话开始和结束时发出它正在写入的文件的名称。您可以通过添加 -q
标志以启用安静模式来禁用此输出。
SHELL
环境变量在确定要为内部进程派生的 shell 时被读取。当变量未设置时,script
将默认为 sh
。
附加到现有文件
可以将新命令附加到现有的打字稿中。这使您可以通过退出子 shell 并开始新会话来“暂停”和“恢复”记录。
添加 -a
标志以将您的命令附加到指定文件。 script
将在未给出标志时覆盖文件的内容。
script -a example_session
添加时序数据
当您只想记录您的步骤以供以后阅读或共享时,基本打字稿是理想的选择。 script
还可以将计时数据与其文本日志一起保存。此信息可用于在命令之间适当延迟的情况下重播整个终端会话。
使用 -t
标志运行 script
以指定写入计时的路径。计时文件有两列格式。每个条目都包含自第一列中最后一条记录以来经过的时间。第二列记录了键入的字符数,从而实现准确的键入速度回放。
script -q -t example_session_timings example_session
重放会话
scriptreplay
命令读取由 script
创建的类型脚本和计时文件。它将它们的输出重播到您的终端。计时数据将用于将每个键入字符的持续时间与其在原始命令序列中的长度相匹配。
scriptreplay -t example_session_timings example_session
一些打字稿可能包含不必要的延迟或以令人不舒服的慢速运行。使用 -d
标志来加速输出。所有记录的时间将除以您通过的次数。
# Run 4 times faster
scriptreplay -d 4 -t timings typescript
您还可以使用 -m
标志来限制单个更新之间的最大延迟。这使您可以指定在 scriptreplay
移动到下一个命令之前允许的最长暂停秒数,即使打字稿指定了更长的延迟。
# Maximum delay of 2 seconds
scriptreplay -m 2 -t timings typescript
与交互式命令一起使用
不建议将 script
与高度交互的命令一起使用。终端文本编辑器、基于 curses 的应用程序和对话框提示可能会在您的打字稿中插入污染垃圾字符。 script
侧重于捕获典型的基于文本的输出,而不是操纵终端以生成图形界面的命令。
script
不适合与非交互式 shell 一起使用,因为它的内壳本质上始终是交互式的。该命令也不应该与管道输入一起使用。
其他选项
script
的 -c
标志允许您指定一个命令。使用此模式时,script
运行命令并捕获其输出,而不是派生一个新的交互式 shell。这可以更有效地捕获某些进程的输出,这些进程在未直接连接到 TTY 时表现不同。
-f
标志指示 script
在每个事件后直接写入会话日志。这通过确保直接捕获输出来提高安全性。
script
手册页建议此标志也可用于实时监控用户的终端,例如在教师和学生场景中。学生将运行 script -f
,然后老师将使用 SSH 连接并实时流式传输 typescript 文件。
script
通常不接受符号链接作为打字稿路径。 --force
标志启用此行为,指示 script
解析指向其目标的硬链接和软链接。
概括
script
可让您将终端会话记录为具有准确计时数据的纯文本文件。您可以手动检查、共享和打印打字稿,或使用 scriptreplay
在您的终端中重放它们。
这些命令包含在大多数流行的 Linux 发行版中。它们适用于所有终端类型,但个别打字稿可能无法在与用于记录的终端不同的终端中正确重播。为获得最佳结果,请在与 script
一起使用的终端类型中运行 scriptreplay
。