一、核心功能与数据流向
tee 命令从标准输入(stdin)读取数据后,将数据同时发送到两个目的地:标准输出(stdout,即终端屏幕)和一个或多个指定文件。数据流在 tee 处被复制分流,不改变原有数据内容。
输入类型:标准输入流(管道传递的文本数据)
输出结果:终端显示 + 文件写入(覆盖或追加)
限制:仅处理标准输出(stdout),不处理标准错误(stderr)
二、语法与参数
tee [参数] [文件]
| 参数 | 功能说明 |
|---|---|
| -a 或 --append | 追加写入文件,不覆盖原有内容 |
| -i 或 --ignore-interrupts | 忽略中断信号(如 Ctrl+C) |
| --help | 显示帮助信息 |
| --version | 显示版本信息 |
三、实战用法
基础用法:输出到屏幕 + 覆盖写入文件
ls -l | tee list.txt
- 终端正常显示 ls 结果
- 同时将结果写入 list.txt,原有内容被清空
追加写入(-a 参数,日志场景最常用)
echo "新内容" | tee -a list.txt
- 内容追加到文件末尾
- 不覆盖旧数据,适合持续记录
同时写入多个文件
who | tee file1.txt file2.txt file3.txt
- 一份输入,同时保存到 3 个文件
- 终端仍正常显示输出
日志场景:实时查看 + 保存
ping www.zhujishice.cn | tee -a ping.log
- 实时显示 ping 结果
- 追加写入 ping.log,保留完整日志
搭配 sudo 写入权限不足的文件
普通用户直接 echo xxx > /etc/xxx 会权限报错,tee 可绕过:
echo "test" | sudo tee /etc/test.conf # 覆盖写入
echo "test2" | sudo tee -a /etc/test.conf # 追加写入
原理:tee 以 root 身份写入文件,比 sudo echo > 写法更可靠
只存文件、不输出到屏幕
df -h | tee disk.log > /dev/null
- 标准输出重定向到 /dev/null(丢弃)
- 数据仅写入 disk.log
四、工作流程图解
标准输入 → tee → 分两路
↳ 1. 标准输出(屏幕)
↳ 2. 指定文件
五、易错点总结
- 不加 -a 默认覆盖文件:日志场景务必加 -a,否则前一次日志被清空
-
权限不足处理:
sudo 命令 > 文件报错时,改用命令 | sudo tee 文件 - stderr 不处理:tee 只能接收管道前的标准输出(stdout),不处理标准错误(stderr)
六、拓展:同时保存标准输出 + 标准错误
ls /nonexist 2>&1 | tee -a log.txt
-
2>&1将标准错误(stderr)重定向到标准输出(stdout) - tee 接收到合并后的数据流,同时保存正常输出和报错信息
