script - 记录终端会话

script 使用伪终端记录交互式会话。默认记录终端输出,也可以另外保存时间信息并使用 scriptreplay 回放。

记录输出

# 仅允许当前用户访问新建日志
umask 077
 
# 开始记录;输入 exit 或按 Ctrl+D 结束
script --log-out session.log

常用参数:

  • -a--append:追加到已有日志。
  • -O FILE--log-out FILE:记录终端输出。
  • -T FILE--log-timing FILE:记录时间信息。
  • -f--flush:每次写入后立即刷新,便于实时查看,但会影响性能。
  • -e--return:返回子进程的退出状态。
  • -o SIZE--output-limit SIZE:限制日志大小。
  • -q--quiet:不显示开始和结束提示。

录制并回放

script --log-timing timing.log --log-out session.log
 
# 结束录制后回放
scriptreplay --log-timing timing.log --log-out session.log

scriptreplay 只重新显示已记录内容,不会再次执行录制期间运行的命令。

安全与隐私

  • --log-in--log-io 会记录终端输入,即使密码输入时终端关闭了回显,也可能被完整保存。非必要不要启用。
  • 即使只记录输出,命令结果、提示符和报错仍可能包含令牌、主机名、路径或个人信息。
  • 不建议把强制录制逻辑直接加入全局 Shell 初始化文件;容易造成递归启动,也涉及用户知情、日志权限和保留期限。
  • 不要为日志目录设置所有用户可写权限。分享前应审查并脱敏,结束使用后按既定策略清理。

需要生成更适合分享的终端演示,可参考 Asciinema

参考资料