「那些鲜为人知的 Linux 命令」 系列
它就像终端里的「行车记录仪」,默默记录你的一切操作。
你有没有过这种经历?
"刚才那个报错信息是什么来着?"
"我刚刚执行的命令输出怎么没了?"
"能不能把整个操作过程给同事看,而不是一步步截图?"
如果你也遇到过这些情况,那你需要认识一下 script 命令。
script 是什么?
script 是 Linux 自带的终端会话录制工具。它能把你终端上显示的一切内容——输入的命令、输出的结果、甚至是颜色代码——完整记录到一个文件中。
简单理解:它就像给你的终端装了一个"行车记录仪"。
# 开始录制
$ script session.log
Script started, file is session.log
# 此时你做的任何操作都会被录制
$ ls -la
$ cat /etc/hosts
$ echo "hello world"
# 停止录制(Ctrl+D 或 exit)
$ exit
Script done, file is session.log
基础用法
1. 最简单的录制
$ script
# 默认生成 typescript 文件
# 退出:Ctrl+D
2. 指定输出文件
$ script /tmp/my-session-$(date +%Y%m%d-%H%M%S).log
文件名包含时间戳,方便管理多个录制文件。
3. 追加模式(不覆盖已有文件)
$ script -a session.log
4. 静默模式
$ script -q session.log
不显示"Script started / Script done"这类提示信息。
高级用法
用法一:回放录制内容
录制完成后,可以用 cat 或 less 直接查看:
$ cat session.log
但更专业的做法是用 scriptreplay 来回放:
# 录制时同时记录时间信息
$ script --timing=timing.log session.log
# 回放(带真实的时间节奏)
$ scriptreplay timing.log session.log
这会按照你操作时的真实时间间隔重新播放每一步,就像看电影回放一样。
用法二:把录制内容转换成命令脚本
# 录制交互式操作
$ script session.log
# ... 执行各种操作 ...
$ exit
# 之后提取纯命令(去掉输出和提示符)
$ grep '^\$' session.log | sed 's/^\$ //' > replay.sh
这对于制作教程和知识沉淀非常有用。
用法三:远程协作的「操作日志」
# SSH 登录到服务器后立即开始录制
$ ssh user@server
$ script /var/log/ops/$(whoami)-$(date +%F).log
把所有运维操作记录下来,出问题时可以追溯每一步。
用法四:在脚本中自动录制
#!/bin/bash
LOGDIR="/var/log/script-records"
mkdir -p "$LOGDIR"
# 自动开始录制
script -q -c "bash --rcfile <(echo 'PS1=\"[REC] \w \$ \"')" \
"$LOGDIR/$(whoami)-$(date +%Y%m%d-%H%M%S).log"
把这个放在 /etc/profile 或 /etc/bash.bashrc 中,就能实现所有用户操作自动记录。
参数速查表
| | |
|---|
-a | | script -a log.txt |
-q | | script -q log.txt |
-c CMD | | script -c "ls -la" |
--timing=FILE | | script --timing=t.log |
-t | | |
-f | | script -f log.txt |
实战场景
场景一:记录编译过程
$ script compile.log
$ make -j8
$ # 如果出错,所有信息都在 compile.log 里
$ exit
场景二:制作教学视频的文字稿
$ script --timing=demo.timing demo.log
$ # 演示各种操作...
$ exit
# 发给学员
$ mail -s "今日课程回放" student@example.com < demo.log
场景三:调试复杂问题
$ script debug-$(date +%s).log
$ # 复现 bug 的所有操作
$ exit
# 把记录发给同事或保存到知识库
macOS 上的情况
macOS 自带 script,但和 Linux 版有些差异。建议:
brew install util-linux # 获得 GNU 版本
script 的局限性
- 不能录制交互式程序(如 vim、top),因为这类程序使用了终端控制序列,
script 录制的内容会包含大量乱码。 - 文件会很大——如果你录制了几个小时的操作,文件可能达到几十 MB。
- 安全性——录制的文件包含明文输出,如果涉及密码等敏感信息,需要注意保管。
总结
script 是你终端操作的最忠实记录者。它让"刚才发生了什么"不再是一个问题。
下次上线操作前,先敲一个 script deploy.log,关键时刻它能救命。