tee
命令是 Linux/Unix 系统中一个非常实用的命令行工具,它的主要功能是从标准输入读取数据,并同时输出到标准输出和一个或多个文件。这个名字来源于 T 型管道(T-shaped pipe),形象地描述了它一分多的数据流特性。
基本语法
tee [选项] [文件...]
常用选项
选项 | 说明 |
---|---|
-a 或 --append |
追加到文件末尾(不覆盖原有内容) |
-i 或 --ignore-interrupts |
忽略中断信号 |
-p |
诊断写入非管道的错误 |
--help |
显示帮助信息 |
--version |
显示版本信息 |
使用示例
1. 基本用法:输出到终端并保存到文件
# 将输出同时显示在屏幕和保存到文件中
echo "Hello World" | tee output.txt
# 查看生成的文件
cat output.txt
# Hello World
2. 追加模式(不覆盖原有内容)
echo "First line" | tee file.txt
echo "Second line" | tee -a file.txt
cat file.txt
# First line
# Second line
3. 同时输出到多个文件
ls -l | tee file1.txt file2.txt file3.txt
4. 结合sudo使用(提升权限写入文件)
echo "new content" | sudo tee /root/protected_file.txt > /dev/null
注意:普通重定向
>
在sudo下会失效,但tee
+sudo
可以正常工作
5. 隐藏终端输出(只写入文件)
echo "Secret message" | tee secret.txt > /dev/null
6. 在脚本中记录输出日志
#!/bin/bash
# 将所有输出同时显示在终端和保存到日志文件
exec > >(tee -a script.log) # stdout重定向到tee
exec &> >(tee -a script.log) # stdout和stderr都重定向
echo "Script started at $(date)"
ls /nonexistent_directory # 这个错误也会被记录
echo "Script completed"
###7.实时监控并记录命令输出
#监控系统进程并记录
top-b-n1|teetop.log
#实时查看日志更新
tail-ftop.log
##高级用法
###1.与grep结合使用
#搜索内容并在显示匹配行的同时保存原始输出
dmesg|teefull_dmesg.log|grep-ierror
###2.调试管道命令
#在复杂管道中检查中间结果
catdata.txt|\
sed's/old/new/g'|\
teestage1.log|\ #保存sed处理后的结果
grep"keyword"|\
teestage2.log|\ #保存grep过滤后的结果
sort-u
##技术细节
1.工作原理:tee
从stdin读取数据,然后同时写入stdout和所有指定的文件
2.性能影响:由于需要多重写入,会比简单重定向稍慢,但在大多数情况下差异不明显
3.错误处理:如果无法写入某个文件,会报错但继续处理其他输出目标
4.二进制安全:可以正确处理二进制数据,不会修改内容
##适用场景
-✅需要同时查看输出和保存到文件时
-✅调试复杂管道命令的中间结果时
-✅需要提升权限写入受保护文件时(配合sudo)
-✅想要实时监控并记录命令输出时
掌握tee
命令可以让你的命令行操作更加灵活高效!
内容由零声教学AI助手提供,问题来源于学员提问