前言
tee命令
Operating System: Ubuntu 22.04.4 LTS
介绍
tee
是 Linux 和类 Unix 系统中的一个常用命令行工具,主要用于将标准输入(stdin)的数据同时输出到标准输出(stdout)和一个或多个文件中。它的名称来源于英文单词 “teeth”,形象地表示数据像牙齿一样被 “咬住” 并分流到不同目标。
核心功能
- 复制输入到文件和屏幕:将管道(pipe)或命令的输出同时保存到文件和终端。
- 支持追加写入:避免覆盖原有文件内容。
- 处理多文件输出:可将数据写入多个文件。
基本语法
tee [选项] [文件1] [文件2] ...
常用选项
选项 | 说明 |
---|---|
-i 或 --ignore-interrupts |
忽略中断信号(如 Ctrl+C ),强制完成写入 |
-a 或 --append |
追加内容到文件(默认覆盖文件) |
-p 或 --output-error |
指定错误处理模式(如 ignore 、warn 、exit ) |
--help |
显示帮助信息 |
--version |
显示版本信息 |
示例场景
基础用法:保存命令输出到文件
# 将 `ls` 的输出同时显示在屏幕和 `file.txt` 中
ls -l | tee file.txt
- 效果:屏幕显示
ls -l
的结果,同时内容被写入file.txt
(若文件存在则覆盖)。
追加写入文件
# 将 `date` 命令的输出追加到 `log.txt` 中
date | tee -a log.txt
- 效果:每次执行都会在
log.txt
末尾添加当前日期,不覆盖原有内容。
多文件输出
# 将 `echo "Hello"` 的输出同时写入两个文件
echo "Hello" | tee file1.txt file2.txt
- 效果:
file1.txt
和file2.txt
均包含 “Hello”。
结合脚本和重定向
# 将脚本输出保存到文件,同时保留原始输出流
./my_script.sh | tee script.log
注意:
tee
不会截断原始输出流,因此后续仍可通过管道传递数据:./my_script.sh | tee script.log | grep "error"
忽略中断信号
# 即使按 Ctrl+C,仍强制完成写入
dd if=/dev/sda of=backup.img | tee -i backup.log
关键特性
保留原始输出流
tee
不会截断管道的输出流,后续命令仍可接收数据:# 既能保存日志,又能过滤错误 my_command | tee output.log | grep "ERROR"
与重定向的区别
>
或>>
会直接覆盖/追加文件,但会截断管道输出流。tee
允许同时保留屏幕输出和文件写入,且不影响后续管道操作。
权限处理
- 若文件不可写,
tee
会报错并停止写入(除非使用-p
指定错误模式)。
- 若文件不可写,
常见问题
Q:如何将
tee
的输出同时发送到多个地方(如文件、网络)?
A:结合管道和tee
:command | tee file1.txt | nc example.com 1234
Q:如何避免
tee
覆盖文件?
A:使用-a
追加模式:command | tee -a existing_file.txt
替代方案
cat > file
+ 重定向:# 传统方法,但会截断管道输出 command > file.txt 2>&1
script
命令:
录制终端会话,但功能更复杂。
适用场景
- 实时查看日志并保存副本
- 脚本中需要同时记录操作和显示结果
- 数据需要分发给多个处理流程(如文件 + API 调用)
掌握 tee
可以显著提升数据处理效率,尤其在需要同时记录和操作输出的场景中非常实用。
结语
第三百二十六篇博文写完,开心!!!!
今天,也是充满希望的一天。