大家好,今天给大家分享一款"高级"
终端会话记录和回放的神器Asciinema
,旨在提供一种简单的方式来记录和分享在终端中发生的交互。
项目介绍
功能特点
1.记录终端会话
Asciinema 可以捕获在终端中输入的命令以及这些命令产生的输出,包括文本、进度条等。例如,当你在终端中运行一系列的系统管理命令(如ls -l、git clone等),Asciinema 能够精确地记录整个操作过程,包括命令的输入顺序、输出的结果(如文件列表、克隆进度等)。
记录的内容会以一种基于文本的格式保存,这种格式能够很好地保留终端会话的原始状态,包括颜色、光标位置等信息。
2.回放功能
Asciinema 所记录的终端会话可以在本地或者通过网络进行回放。回放时,就像重新观看当时操作终端的整个过程一样,包括命令的逐个输入和输出的动态显示。这对于教学演示、技术支持等场景非常有用。比如,开发人员可以通过回放向其他同事展示如何重现一个软件构建过程中的问题,或者系统管理员可以用它来指导新手如何配置服务器。
3.分享功能
Asciinema 提供了方便的分享机制。用户可以将录制好的终端会话上传到asciinema.org
网站(官方网站),也可以分享到自己的服务器或者其他存储平台。一旦分享,其他人就可以通过一个唯一的 URL 访问并观看这些终端会话。这使得知识的传播更加高效,例如开源项目的维护者可以分享项目的安装和配置过程,方便用户快速上手。
Asciinema 支持将录制内容导出为多种格式,如 HTML、GIF 等,以满足不同用户的需求。
4.支持时间戳和注释
在录制过程中,可以添加时间戳,这样在回放时能够清楚地看到每个操作发生的时间点。同时,还可以添加注释来解释某些关键操作或者输出的意义。例如,在演示一个复杂的数据分析脚本时,可以在重要的命令输出部分添加注释,说明这些数据的含义和用途。
5.跨平台
Asciinema 支持多种操作系统和终端模拟器,包括 Linux、macOS 和 Windows 等。
技术实现
1.数据格式
Asciinema 使用一种自定义的基于文本的格式来存储终端会话记录。这种格式包含了终端输入输出的字符流、时间信息以及元数据(如终端的尺寸等)。它的设计初衷是为了能够高效地存储和传输终端会话,同时又能够在不同的平台和工具之间进行解析和回放。
2.与终端的交互
它通过在终端的标准输入输出流(stdin 和 stdout)上进行钩子(hooking)来捕获数据。在 Linux 和类 Linux 系统中,它利用了一些系统调用和终端设备的特性来实现准确的记录。例如,它可以捕获控制字符(如 Ctrl + C、Ctrl + Z 等)的输入,并正确地记录这些操作对终端会话产生的影响。
应用场景
教学:教师可以录制终端会话来演示如何使用命令行工具或执行特定任务,从而帮助学生更好地理解和掌握相关知识。
演示:开发者可以使用 Asciinema 来展示他们的软件或工具在终端中的运行效果,以便更好地向潜在用户或合作伙伴介绍产品。
文档编写:技术人员可以录制终端会话来编写详细的操作指南或教程,以便用户能够更轻松地按照步骤进行操作。
错误报告:当遇到问题时,可以使用 Asciinema 来录制终端会话并发送给技术支持人员,以便后者更准确地了解问题所在并提供解决方案。
安装使用
安装
Asciinema 支持多种操作系统和终端模拟器,包括 Linux、macOS 和 Windows 等。
1.通用安装方法
使用pipx
进行安装:
pipx install asciinema
2.Linux 系统
Arch Linux
sudo pacman -S asciinema
Debian
sudo apt install asciinema
Fedora
sudo dnf install asciinema
Gentoo
sudo emerge -av asciinema
openSUSE
sudo zypper install asciinema
Ubuntu:22.04 或更新版本
sudo apt install asciinema
3.macOS 系统
Homebrew
brew install asciinema
MacPorts
sudo port selfupdate && sudo port install asciinema
Nix
nix-env -i asciinema
使用
1.录制终端会话
asciinema rec [filename]
默认启动并录制新的 shell 实例,可通过-c指定录制命令。按下ctrl+\
可暂停捕获,再次按下恢复。录制结束可通过ctrl+d
或输入exit
,若指定filename则保存为文件,否则保存到临时文件并提示后续操作。
2.回放终端会话
asciinema play <filename>
可回放本地文件、HTTP (S) URL 或包含特定标签的 HTML 页面,也可从标准输入读取。
回放本地文件:
asciinema play /path/to/demo.cast
回放远程HTTP(S) 文件:
asciinema play https://asciinema.org/a/22124.cast
asciinema play http://example.com/casts/demo.cast
从标准输入回放:
cat /path/to/asciicast.cast | asciinema play -
ssh user@host cat asciicast.cast | asciinema play -
3.将录制内容的完整输出打印到终端
asciinema cat <filename>...
4.将录制内容上传到asciinema.org或自托管服务器
asciinema upload <filename>
可通过asciinema auth
命令进行认证以管理上传的录制内容。
5.远程服务认证
asciinema auth
将本地系统与asciinema.org
用户账户进行认证,确保上传的录制与账户关联,未认证的上传 7 天内会被删除。
使用自托管服务,请阅读自托管服务建设文档。
总结
Asciinema
作为一款开源的命令行工具,专注于终端会话的记录与分享。它能够全面且精准地捕获终端里的命令输入、输出细节,无论是文本数据还是各类动态效果都能如实记录,并以独特文本格式存储,保留原始状态。凭借其本地和网络回放功能,在技术教学、技术支持以及开源项目文档化等场景广泛应用,同时支持多操作系统安装,方便用户使用,有效推动了终端操作经验的交流与传承。
项目地址
https://github.com/asciinema/asciinema