tee 是 Linux 中一个非常实用的命令,它就像一个三通管接头,能够将数据同时导向两个地方:一个是标准输出(通常就是终端屏幕),另一个或多个是你指定的文件。
基本语法与核心功能
tee 命令的基本语法如下:
| |
它的核心功能是:从标准输入读取数据,然后将数据同时写入标准输出和每一个指定的文件。
主要选项参数
tee 命令的选项不多,但都非常实用。
| 选项 | 全称 | 作用 |
|---|---|---|
-a | --append | 追加到文件末尾,而不是覆盖原有内容。 |
-i | --ignore-interrupts | 忽略中断信号(如 Ctrl+C),使命令执行更稳定。 |
常见用法与实例
下面通过一些具体例子来看看 tee 命令的强大之处。
基础用法:同时显示并保存输出 这是最经典的用法。下面的命令将
ls的结果既显示在屏幕上,又保存到file_list.txt文件中。1ls -l | tee file_list.txt如果
file_list.txt已存在,默认会被覆盖。追加内容到文件 使用
-a选项可以将新内容添加到文件末尾,而不会清空旧内容。1echo "New log entry" | tee -a logfile.txt同时写入多个文件
tee可以一次性将内容写入多个文件。1dmesg | tee system_info.txt backup_info.txt执行后,
dmesg的输出会同时写入system_info.txt和backup_info.txt两个文件。在管道中充当“检查点” 这是
tee的一个高级技巧。你可以将一个长管道流程分段,用tee把中间结果保存下来,既方便调试,又能把结果传递给下一个命令。1ls *.txt | tee file_list.txt | wc -l这个命令会: 1. 列出所有
.txt文件; 2. 将列表保存到file_list.txt; 3. 同时将列表传递给wc -l统计行数。捕获标准错误输出 如果你想同时保存命令的正常输出和错误信息,可以结合标准错误重定向。
1some_script.sh 2>&1 | tee output_and_error.log2>&1将标准错误重定向到标准输出,这样tee就能捕获所有信息。多次输出到屏幕 将文件名指定为
-,可以让tee将输入内容多次发送到标准输出。这个技巧有时用于放大某个操作的可见性,或者在需要多次重复输入流的特殊脚本中。1echo "Hello" | tee -这会在屏幕上显示两次 “Hello”。
注意事项与使用场景
- 覆盖风险:默认情况下,
tee会覆盖目标文件。如果不希望丢失原内容,务必记得使用-a选项进行追加。 - 常见场景:
- 脚本调试与日志记录:在复杂的管道命令中插入
tee,可以保存中间结果以供检查。 - 安装软件或编译程序:实时查看进度的同时,将详细的输出信息保存到日志文件。
- 需要同时监控和记录的任务:例如系统备份、长时间运行的批处理任务等。
- 脚本调试与日志记录:在复杂的管道命令中插入
tee 命令的精髓在于它的“一分为二”能力,完美解决了“既想看到过程,又想留下记录”的需求。
💬 评论