script 命令是一个非常实用且经典的工具,它的核心功能是将终端(或伪终端)中所有的输入和输出都记录到一个文件中,这对于记录操作过程、生成教程、捕获调试信息或者与他人分享你的操作步骤非常有帮助。

基本用法
最简单的用法就是直接在命令后跟上你想保存记录的文件名。
script my_session.log
执行这条命令后,你的终端会进入一个新的 script 会话,从这一刻起,你在终端中输入的每一个命令、以及命令的每一个输出(包括错误信息),都会被实时追加到 my_session.log 文件中。
当你想结束记录时,只需要输入 exit 命令,或者按下 Ctrl+D 快捷键,你就可以回到原来的终端会话中。
示例流程:

# 1. 开始记录 $ script my_session.log Script started, file is my_session.log # 2. 执行一些命令 $ ls -l total 8 -rw-r--r-- 1 user user 1234 Oct 26 10:30 my_session.log -rw-r--r-- 1 user user 5678 Oct 26 10:31 my_script.sh $ echo "Hello, this is a test." Hello, this is a test. $ pwd /home/user # 3. 结束记录 $ exit exit Script done, file is my_session.log # 4. 检查生成的文件 $ cat my_session.log Script started on 2025-10-26 10:30:15 $ ls -l total 8 -rw-r--r-- 1 user user 1234 Oct 26 10:30 my_session.log -rw-r--r-- 1 user user 5678 Oct 26 10:31 my_script.sh $ echo "Hello, this is a test." Hello, this is a test. $ pwd /home/user $ exit Script done on 2025-10-26 10:32:20
常用选项
script 命令提供了一些非常有用的选项来控制其行为。
-a 或 --append
默认情况下,script 会覆盖指定的输出文件,如果你想在已有文件的基础上追加内容,而不是覆盖它,可以使用 -a 选项。
# 第一次记录 script -a session.log # ... 执行一些命令 ... exit # 第二次记录,内容会追加到 session.log 的末尾 script -a session.log # ... 执行另一些命令 ... exit # 查看文件,会发现两次记录的内容都在 cat session.log
-c 或 --command
这个选项允许你直接执行一个命令,并将其输出记录下来,而不是启动一个交互式的 shell,这在自动化脚本中非常有用。
# 执行 `ls -l` 并将结果记录到 output.txt script -c "ls -l" output.txt # 查看 output.txt cat output.txt
Script started on 2025-10-26 10:35:00
total 8
-rw-r--r-- 1 user user 1234 Oct 26 10:30 my_session.log
-rw-r--r-- 1 user user 5678 Oct 26 10:31 my_script.sh
Script done on 2025-10-26 10:35:01
可以看到,它只记录了 ls -l 命令的输出,没有进入交互式会话。

-e 或 --return
这个选项会记录命令的退出码,这对于调试脚本非常有用,可以知道每个命令是否成功执行。
# 执行一个会失败的命令和一个成功的命令 $ script -e error_demo.log Script started, file is error_demo.log $ ls /non_existent_dir ls: cannot access '/non_existent_dir': No such file or directory $ echo "This is fine." This is fine. $ exit exit Script done, file is error_demo.log # 查看文件,你会看到 "Command exited with status 127" 这样的记录 $ cat error_demo.log Script started on 2025-10-26 10:40:00 $ ls /non_existent_dir ls: cannot access '/non_existent_dir': No such file or directory Command exited with status 127 $ echo "This is fine." This is fine. Command exited with status 0 Script done on 2025-10-26 10:41:05
-f 或 --flush
默认情况下,输出是先缓存在内存中,直到 script 会话结束才会一次性写入文件,如果记录一个非常长的会话,可能会因为意外中断(如断电、终端关闭)而导致数据丢失。-f 选项可以让 script 实时地将数据写入文件,确保数据安全。
script -f session.log # ... 执行长时间任务 ... # 即使终端意外关闭,session.log 中也已经记录了之前的内容
-q 或 --quiet
安静模式,使用此选项后,script 启动和结束时的提示信息("Script started...", "Script done...")将被隐藏。
script -q quiet_session.log # ... 执行命令 ... exit # 文件中不会有 "Script started" 或 "Script done" 字样 cat quiet_session.log
-t 或 --timing
这个选项会记录每个输入输出事件发生的时间戳,生成的文件不仅包含内容,还包含了时间信息,这对于分析性能或重现事件顺序非常有用。
生成的文件格式是 timestamp:content。
script -t timing_session.log # ... 快速输入一些命令 ... exit # 查看文件,你会发现每行前面都有时间戳 cat timing_session.log
高级用法:使用 scriptreplay 回放
如果你在记录时使用了 -t 选项,那么恭喜你,你可以使用 scriptreplay 命令来“回放”你的操作过程!这对于制作教学视频或重现问题场景非常有帮助。
scriptreplay 需要两个文件:
- 包含时间戳的日志文件(由
script -t生成)。 - 一个“原始”的输入文件(
script默认不生成,需要通过-t的输出重定向来获取)。
如何正确生成用于回放的文件:
# 1. 运行 script,将时间戳输出重定向到 timing_file,主输出重定向到 typescript_file # 注意:`-t` 选项会将时间戳打印到标准错误,所以我们需要用 2> 来重定向它 script -t 2> timing_file typescript_file # 2. 在新的会话中执行一些命令 $ date Wed Oct 26 10:45:00 CST 2025 $ echo "Hello world" Hello world $ sleep 2 $ whoami user $ exit # 3. 回放记录 # -t 指定时间戳文件 # -s 指定输入文件 scriptreplay -t timing_file -s typescript_file
执行 scriptreplay 后,你的终端会以与原来几乎相同的速度,逐字逐句地重新播放你刚才的操作,包括命令的输出和执行之间的延迟。
实际应用场景
- 记录复杂操作:当你需要执行一系列复杂的、容易出错的命令时,先用
script记录下来,如果中间出错,可以直接查看日志,而不需要凭记忆回忆每一步。 - 编写教程:在编写 Linux/Shell 教程时,使用
script可以完美地捕获命令和输出,确保教程的准确性。 - 技术支持与调试:当你在向技术支持人员或同事描述一个问题时,可以提供一个
script记录,让他们能完整地看到你的操作环境和命令执行过程,这比文字描述要清晰得多。 - 自动化任务日志:结合
-c选项,可以在自动化脚本中捕获命令的详细输出,便于后续审计和排错。 - 面试或演示:在进行技术面试或产品演示前,可以先录制好操作流程,确保演示的流畅性。
| 选项 | 全称 | 描述 |
|---|---|---|
-a |
--append |
到已存在的文件,而不是覆盖。 |
-c |
--command |
执行指定的命令并记录输出,不进入交互式 shell。 |
-e |
--return |
记录每个命令的退出状态码。 |
-f |
--flush |
实时将数据写入文件,而不是在会话结束时写入。 |
-q |
--quiet |
静默模式,不显示 "Script started/done" 信息。 |
-t |
--timing |
记录每个事件的时间戳,可用于回放。 |
script 命令是 Linux 工具箱中一个简单但功能强大的成员,熟练掌握它能极大地提高你的工作效率和问题排查能力。
