0

0

如何在Linux中录制会话 Linux script回放方法

P粉602998670

P粉602998670

发布时间:2025-08-29 09:16:01

|

211人浏览过

|

来源于php中文网

原创

使用script命令录制终端会话并生成时间戳文件,通过scriptreplay按节奏回放;2. 可追加录制或静默模式优化体验,但需注意密码泄露风险及全屏程序回放混乱问题;3. 录制基于伪终端捕获字符流,受限于终端大小与环境差异,无法还原图形操作;4. 分享可通过屏幕录制转视频或使用asciinema实现网页化播放,支持嵌入与文本复制,提升可视化与交互性。

如何在linux中录制会话 linux script回放方法

在Linux中,录制终端会话主要依赖

script
命令,而回放则通过
scriptreplay
实现。这套组合拳能帮你把命令行操作完整地记录下来,无论是为了演示、教学,故障排查时的复盘分析,还是仅仅为了记录自己的操作路径,都非常实用且直接。

解决方案

要录制一个Linux终端会话,最核心的步骤就是启动

script
命令,执行你的操作,然后退出。回放时,则需要用到
scriptreplay

录制会话:

我们通常会使用

script
命令来启动录制。为了能够准确地回放,特别是要还原操作的节奏感,生成一个时间戳文件(timing file)至关重要。

script -t 2> session.timing session.typescript

这行命令会做几件事:

  • script
    : 启动录制程序。
  • -t
    : 告诉
    script
    生成一个时间戳文件。这个文件记录了每次输出和前一次输出之间的时间间隔。
  • 2> session.timing
    : 将标准错误输出重定向到
    session.timing
    文件。在一些
    script
    版本中,时间戳信息默认是通过标准错误输出的。
  • session.typescript
    : 这是主录制文件,包含了你终端会话的所有输入和输出内容。

执行完这行命令后,你会在终端看到“Script started, file is session.typescript”之类的提示。现在,你可以像往常一样执行你的命令、操作文件、运行程序等。

完成所有操作后,输入

exit
或按下
Ctrl+D
来结束录制。你会看到“Script done, file is session.typescript”的提示。

回放会话:

有了

session.typescript
(内容文件)和
session.timing
(时间戳文件),我们就可以使用
scriptreplay
命令来回放了。

scriptreplay session.timing session.typescript

执行后,你的终端会话就会像电影一样,按照你录制时的节奏和内容,一字不差地重现出来。

如何自定义Linux会话录制,并处理潜在问题?

坦白说,

script
命令虽然强大,但使用起来还是有一些细节和“坑”需要注意的。自定义录制可以让我们更好地适应不同场景,而了解潜在问题则能避免一些不必要的麻烦。

首先,如果你想在现有录制文件后面追加内容,而不是每次都创建新文件,可以使用

-a
选项:

script -a -t 2> existing_session.timing existing_session.typescript

这在需要分段录制或后续补充时非常方便。另外,如果你觉得

script
启动和结束时那些“Script started/done”的提示有点多余,可以使用
-q
(quiet mode)选项来抑制它们:

script -q -t 2> session.timing session.typescript

但这里有个小问题,有时候

script -q
可能会影响到时间戳的生成方式,所以在使用时最好测试一下回放效果。

百度AI开放平台
百度AI开放平台

百度提供的综合性AI技术服务平台,汇集了多种AI能力和解决方案

下载

至于潜在问题,最常见的可能就是敏感信息的泄露

script
命令会记录终端上的所有内容,包括你输入的密码、API密钥等。如果你在录制过程中不小心输入了这些信息,它们就会明文保存在
session.typescript
文件中。所以,在进行敏感操作时,要么暂停录制,要么就得事后手动编辑
typescript
文件来清理。这工作量可不小,而且容易出错。

另一个让人头疼的问题是全屏应用程序的录制和回放。比如,你在

script
会话中打开了
vi
/
vim
编辑器,或者运行了
top
htop
这样的工具
script
记录的是字符流,而不是终端的图形状态。这意味着,当你在
vi
里上下移动光标、插入删除文本时,
script
只会记录下键盘的输入和
vi
返回的字符序列。回放时,这些操作可能无法完美地重现
vi
界面的动态变化,看起来可能会有点混乱,甚至无法理解。所以,对于这类应用,
script
的体验确实不太理想。

Linux
script
scriptreplay
命令的工作原理及局限性是什么?

要深入理解

script
,得知道它其实是利用了Unix/Linux系统中的一个伪终端(pseudo-terminal,简称pty)概念。当你启动
script
时,它会在后台创建一个新的pty,然后将你的shell连接到这个pty的从属端。
script
程序本身则连接到pty的主端,并像一个中间人一样,截获所有流经这个pty的数据——包括你的键盘输入(stdin)、程序的输出(stdout)和错误信息(stderr)。所有这些数据都会被原封不动地写入到
.typescript
文件中。

-t
选项生成的时间戳文件,则记录了每次从pty主端读取到数据块时的时间戳和数据块的长度。简单来说,它不是记录每个字符的时间,而是记录“我收到了多少数据,距离上次收到数据过去了多久”。

工作原理总结:

  1. script
    扮演中间人角色,创建一个新的伪终端,将你的shell连接到它,然后将所有输入输出复制到
    .typescript
    文件,并可选地将时间戳信息写入
    .timing
    文件。
  2. scriptreplay
    读取
    .typescript
    文件中的内容,并参考
    .timing
    文件中的时间间隔数据,以相同的速度将内容“打印”回你的当前终端,从而模拟出原始会会话的过程。

局限性嘛,说起来还真不少:

  • 非图形化限制:
    script
    只能记录文本终端会话,对于任何图形界面操作,比如你用鼠标点击菜单、拖动窗口,它是完全无能为力的。
  • 全屏应用回放不佳: 前面提过,像
    vi
    top
    less
    这类需要控制整个终端屏幕的应用,
    script
    的回放效果往往不理想。因为它记录的是字符流,不理解终端控制序列(ANSI escape codes)对屏幕状态的实际改变。回放时,你可能会看到一堆乱码或者屏幕刷新不正常。
  • 终端大小问题: 如果你录制时的终端大小和回放时的终端大小不一致,回放效果可能会很糟糕,文本可能会错位、换行混乱。
  • 环境依赖: 回放时,虽然内容是重现了,但你当前的环境变量、shell配置等并不会被还原到录制时的状态。这通常不是问题,但在某些特殊情况下可能会导致一些误解。
  • 交互性缺失:
    scriptreplay
    只是一个被动的播放器,你无法在回放过程中进行交互,比如暂停、快进、倒退,或者在某个点插入新的命令。

如何将录制的Linux会话内容有效分享与转换,甚至进行高级可视化?

录制好了会话,下一步自然是想着怎么分享出去,或者让它看起来更酷一点。直接分享

.typescript
.timing
文件当然是最直接的方式,但接收者也需要有
scriptreplay
才能观看。

分享与转换为视频:

最简单粗暴但有效的方法,就是在回放时进行屏幕录制。你可以启动

scriptreplay
,然后使用任何屏幕录制软件(比如
OBS Studio
Peek
Kazam
等)录制你的终端窗口。这样就能得到一个标准的视频文件(MP4、GIF等),方便在任何平台分享和播放。缺点是,这种方式会损失文本的可复制性,而且文件通常比较大。

如果你想要更轻量、更现代的终端会话分享方式,我个人觉得

asciinema
是一个非常棒的替代品。虽然它不是
script
命令的直接扩展,但它解决了
script
在分享和可视化方面的很多痛点。
asciinema
会将录制内容保存为
.cast
文件(一个JSON格式的文件),这个文件不仅包含内容和时间戳,还包含终端大小等元数据。最重要的是,
asciinema
提供了一个Web播放器,你可以将
.cast
文件上传到
asciinema.org
,然后获得一个可以直接在浏览器中播放的链接,甚至嵌入到网页中。它支持暂停、复制文本,体验远超
scriptreplay

高级可视化与内容处理:

对于

script
生成的
.typescript
文件,因为它本质上就是纯文本,所以你可以利用各种文本处理工具(如
grep
sed
awk
)来对内容进行分析、过滤或提取。比如,你可能只想找到某个命令的输出,或者统计某个特定错误出现的次数。

# 从typescript文件中查找所有包含“error”的行
grep "error" session.typescript

# 提取某个特定命令的输出(假设命令是“ls -l”)
sed -n '/ls -l/,/your_next_prompt/p' session.typescript

这虽然不是“可视化”,但却是对录制内容进行深度分析的基础。如果你想更进一步,结合一些自定义脚本,理论上可以解析

.typescript
.timing
文件,然后用Python或其他语言生成更复杂的动画或交互式展示,但这已经超出了
script
工具本身的能力范围,需要投入额外的开发工作了。毕竟,
script
的核心设计理念就是简单、直接地记录和回放。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

425

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

537

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

313

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

78

2025.09.10

Sass和less的区别
Sass和less的区别

Sass和less的区别有语法差异、变量和混合器的定义方式、导入方式、运算符的支持、扩展性等。本专题为大家提供Sass和less相关的文章、下载、课程内容,供大家免费下载体验。

207

2023.10.12

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

317

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

754

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

95

2025.08.19

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

89

2026.02.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.4万人学习

Git 教程
Git 教程

共21课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号