Linux tee 命令 - 输入输出分流工具
• 最后修改:2025-07-23 • 阅读量:39
本文全面解析 Linux / Unix / FreeBSD 系统中的 tee
命令(英文全称:T-Splitter),提供多系统安装指南和深度操作技巧,涵盖标准输出分流、文件写入、管道组合等全场景实践。
tee 命令释义
tee
(T-Splitter 的命名源于管道工的 T 型接头)是 Shell 编程的核心工具,用于 同时输出到屏幕和文件。其主要功能包括:
- 🔄 双向分流:将标准输入同时发送到标准输出和文件
- 📝 多重记录:同步写入多个文件
- 🛡️ 数据保护:追加模式防止覆盖重要内容
- 🚀 管道增强:在命令链中插入日志记录点
- 🧩 错误处理:可忽略写入错误继续执行
典型应用场景:
- 记录命令输出同时查看结果
- 创建实时日志文件
- 调试复杂命令管道
- 多目标数据备份
- 权限受限环境的数据收集
tee 命令语法
tee [选项]... [文件]...
语法元素说明
- [选项]:控制输出行为的参数
- [文件]:要写入的目标文件(可指定多个)
tee 命令示例
基础输出分流
标准输出与文件同步
ls -l | tee directory_list.txt
屏幕显示目录列表,同时保存到文件
多文件同时写入
dmesg | tee system.log boot.log
将内核消息写入两个日志文件并显示在屏幕
高级分流技术
追加模式避免覆盖
echo "New entry" | tee -a logfile.txt
在文件末尾添加内容,保留原有数据
忽略写入错误继续执行
cat data.bin | tee -i output1.bin output2.bin
即使某个文件写入失败也继续处理
管道中间记录点
find / -name "*.conf" 2>/dev/null | tee conf_files.txt | grep nginx
保存所有配置文件路径,同时筛选nginx配置
系统管理应用
带时间戳的安装日志
sudo apt install nginx | tee -a "$(date +%Y%m%d)_install.log"
记录带日期的安装日志
多用户实时监控
tail -f /var/log/syslog | tee >(grep ssh > ssh.log) >(grep http > http.log)
同时生成不同服务的独立日志
命令选项详解
选项 | 说明 | 参数示例 |
---|---|---|
-a, --append |
追加到文件(不覆盖) | tee -a log.txt |
-i, --ignore-interrupts |
忽略中断信号 | tee -i output.log |
-p, --output-error |
错误处理模式:warn (警告)warn-nopipe (管道错误警告)exit (立即退出)exit-nopipe (管道错误退出) |
-p warn-nopipe |
--help |
显示帮助信息 | |
--version |
显示版本信息 |
错误处理模式详解
- warn:写入错误时显示警告但继续
- warn-nopipe:管道中断时警告但继续(默认)
- exit:任何错误立即退出
- exit-nopipe:管道中断时退出
tee 命令工作原理
tee
的核心工作机制:
- 输入读取:从标准输入获取数据流
- 数据复制:创建输入数据的多个副本
- 并行输出:
- 副本1发送到标准输出
- 副本2+写入指定文件
- 缓冲管理:优化大流量数据处理
- 错误处理:根据选项处理写入失败
数据处理流程:
graph LR
A[标准输入] --> B(tee命令)
B --> C[标准输出]
B --> D[文件1]
B --> E[文件2]
B --> F[...]
系统安装指南
tee
命令通常包含在 coreutils 包中,大多数系统默认已安装。若未安装,请使用以下命令:
Debian / Ubuntu 系统
# 更新软件源
sudo apt update
# 安装 coreutils
sudo apt install coreutils -y
RHEL / AlmaLinux / Rocky Linux 系统
# 更新软件源
sudo dnf update
# 安装 coreutils
sudo dnf install coreutils
FreeBSD 系统
# 更新软件源
sudo pkg update
# 安装 GNU coreutils
sudo pkg install coreutils
Arch Linux 系统
# 更新软件源
sudo pacman -Sy
# 安装 coreutils
sudo pacman -S coreutils
验证安装:
tee --version
结语
tee
命令是系统管理员的瑞士军刀,关键要点:
- 实时监控:同时查看和记录命令输出
- 数据冗余:多目标写入提高可靠性
- 管道调试:复杂命令链的中间检查点
- 跨平台兼容:Linux / Unix / FreeBSD 行为一致
最佳实践:
- 重要操作始终使用
tee
记录日志- 使用
-a
选项避免意外覆盖文件- 结合
>(命令)
语法实现实时处理- 在脚本中使用
exec > >(tee log.txt)
记录所有输出- 生产环境使用
-p warn-nopipe
防止管道中断
通过掌握 tee
命令,您将能高效管理命令输出,实现操作可见性与数据持久化的完美平衡!