使用 Asciinema 在 Linux 中记录终端会话
Asciinema 是一个免费的开源命令行实用程序,可用于记录 Linux 发行版中的终端会话。它可以高质量捕获命令及其输出,并生成清晰的文本,比用于捕获整个桌面会话的其他屏幕录制和截屏工具更好。
Asciinema的主要特点
除了记录终端仿真器中可见的文本输出之外,Asciinema 还可以将正在进行的记录会话附加到先前记录的输出,从而允许用户从多个演员创建连续流。
Asciinema 捕获的输出可以随时在 Linux 安装上回放。您还可以将捕获的输出上传到 Asciinema 网站并与其他人分享。如果您有网站或 Web 应用程序,则可以嵌入捕获的输出并在 Web 浏览器或 Web 应用程序容器中播放。
请注意,捕获的输出不会以 mp4 和 webm 等视频格式呈现。它以称为“asciicast”的自定义格式呈现,并且只能由 Asciinema 播放。 Asciinema 网站上提供了一个基于 Javascript 的播放器,用于在网络浏览器中播放捕获的 asciicast 输出。
在 Linux 中安装 Asciinema
您可以通过运行以下命令在最新版本的 Ubuntu 中安装 Asciinema:
您还可以在 Ubuntu 和其他 Linux 发行版中使用 pip 包管理器来安装它。为此,请在 Ubuntu 中运行以下两个命令:
$ pip3 install asciinema
此处提供了更多软件包和进一步的发行版特定安装说明。
在 Linux 中使用 Asciinema
要开始记录终端输出,请按以下格式运行 Asciinema 命令:
一旦您运行命令,Asciinema 将开始记录 shell 输出。它将在终端中向您显示一条消息,如下面的屏幕截图所示:
正如您在上面的输出中看到的,Asciinema 已开始录制 asciicast,录制完成后将存储在“/tmp”文件夹中。录制开始后,您在终端中键入或运行的任何内容都将被捕获并保存到“.cast”文件中。可以通过按
停止正在进行的录制后,系统会提示您将其保存到本地硬盘或上传到 Asciinema 官方网站。您可以按
默认情况下,Asciinema 将捕获的输出保存到“tmp”文件夹。要将 asciicast 保存到本地存储磁盘上的自定义位置而不在线上传,请向“rec”命令提供文件路径。这是一个示例命令:
要在 Asciinema 网站上手动上传捕获的 asciicast,请运行以下格式的命令(根据需要替换文件路径):
要将新录音添加到现有 asciicast,请按照以下格式使用“append”命令(新的录音会话将启动,输出将附加到提供的“.cast”文件):
捕获“.cast”文件后,您可以使用以下命令进行播放(根据需要替换文件路径):
这是一个小演示,展示了 Asciinema asciicast 的实际应用:
请注意,这是缩小比例的 GIF 动画,它不会以高清的完整质量显示捕获的输出。您必须自己在 Linux 发行版上播放“.cast”文件才能以完整质量观看它,或者您必须将捕获的输出嵌入到网站中,然后使用 Asciinema Javascript 库进行播放。将 asciicast 上传到 Asciinema 网站后,您还可以观看高质量的 asciicast。
这是一个高清 asciicast 示例,您可以通过访问 Asciinema 官方网站在网络浏览器中观看。
有关 Asciinema 命令行实用程序的更多信息,请运行以下两个命令:
$ asciinema –help
您还可以从这里在线浏览官方文档。
在您自己的网站或 Web 应用程序中嵌入 Asciicast
如果您只想在线共享捕获的会话,并且没有自己的网站或 Web 应用程序,最好的方法是使用上述命令将其在线上传到 Asciinema 官方网站,然后与其他人共享 URL 链接。
要将 asciicast 嵌入到您自己的网站或 Web 应用程序中,您需要访问在线上传 asciicast 的页面,将 Asciinema 播放器脚本添加到您的 html 文件中。例如,要嵌入上面链接的 Asciinema 示例,请单击 asciicast 网页上的“共享”按钮以获取嵌入代码。这是显示此内容的屏幕截图:
如果一个非常简单的html文件包含以下代码:
<script id="asciicast-335480" src="https://asciinema.org/a/335480.js" async></script>
您将在网页中看到嵌入式播放器,如下所示:
结论
Asciinema 提供了一种高质量捕获基于文本的输出的方法。与其他视频录制和捕获方法不同,Aciinema 将捕获的会话中的原始数据保存到文本文件中,并一点一点地回放。这会产生清晰的文本,就好像您一直在运行命令并在自己的硬件上实时获取文本输出一样。