linux中tee解析
tee
命令的基本工作原理
tee
命令是从管道读取输入,但它有两个默认输出:
标准输出(stdout) - 默认显示到终端
文件输出 - 保存到指定文件
命令输出 | tee filename
数据流向:
command → [管道] → tee → 终端屏幕↓文件
实际示例
# 示例1:同时显示在屏幕和保存到文件
ls -l | tee file_list.txt
tee
的多个输出目标
实际上,tee
可以有多于两个输出:
# 输出到多个文件
command | tee file1 file2 file3# 输出到文件和另一个命令
command | tee file.txt | grep "pattern"
为什么说 tee
默认输出到终端?
因为 tee
的标准输出默认连接到终端,就像其他命令一样:
# 这三条命令是等价的:
ls | tee file.txt
ls | tee file.txt > /dev/tty
ls | tee file.txt 1>/dev/tty
注:> /dev/tty
表示:将输出重定向到当前正在使用的这个终端窗口,不受其他重定向影响。
对比普通重定向
# 普通重定向:输出只到文件,不在屏幕显示
ls > file.txt# 使用 tee:输出同时到屏幕和文件
ls | tee file.txt# 使用 tee 但不想显示在屏幕
ls | tee file.txt > /dev/null
处理错误消息的重要细节
关键点: tee
只处理标准输出,不处理标准错误:
# 错误示例:这样不能丢弃原命令的错误
find /etc -name "*.conf" | tee output.txt 2>/dev/null
# 错误:find 命令的错误仍然会显示,因为 2>/dev/null 只作用于 tee 命令# 正确做法:先重定向错误,再管道给 tee
find /etc -name "*.conf" 2>/dev/null | tee output.txt
总结
tee
默认有两个输出:终端屏幕 + 指定文件这是
tee
命令的设计特性,不是特殊的管道魔法tee
只处理标准输出流,错误流需要单独处理可以认为
tee
是"T型分流器",一份输入,多份输出