Linux `tee` 命令详解

🐧 Linux tee 命令详解

学习目标

  1. 理解 tee 命令的基本功能与工作原理
  2. 掌握 tee 在命令管道中的作用,以及如何将输出同时显示到屏幕和文件中
  3. 能够结合脚本、日志记录、调试等实际场景灵活使用 tee

核心重点(Key Points)

主题 内容
命令名称 tee
功能 将输入内容“复制”到标准输出和一个或多个文件中
底层机制 从 stdin 读取数据,写入 stdout 和指定的文件
常见用途 日志记录、调试脚本、命令行中间结果保存
支持平台 所有主流 Linux 发行版(Ubuntu/CentOS/EulerOS/Debian)
典型命令 `command

详细讲解

🔍 一、什么是 tee 命令?

tee 是一个非常实用的 Linux 命令行工具,它的名字来源于“T 形接头”——就像水管中的 T 型接口一样,它能将输入流“分叉”成两路

  • 一路继续流向标准输出(通常是终端)
  • 另一路写入指定的一个或多个文件中

⚠️ 它非常适合在执行命令时同时查看输出并保存日志


🛠 二、安装与查看版本

大多数 Linux 系统默认已安装 tee,因为它属于 coreutils 工具包。

Ubuntu / Debian

sudo apt update
sudo apt install coreutils

CentOS / RHEL

sudo yum install coreutils

EulerOS / openEuler

sudo dnf install coreutils

查看版本:

tee --version
# 输出示例:tee (GNU coreutils) 8.34

📚 三、基本语法与常见参数

tee [OPTIONS]... [FILE]...
参数 含义说明
-a 追加模式(append),不覆盖原有内容
-i 忽略中断信号(SIGINT),防止 Ctrl+C 中断写入
-p 如果管道错误,不退出程序(需支持此特性)

🎯 四、实战场景与案例解析

✅ 场景1:将命令输出同时打印到屏幕和文件(基础用法)

ls -l | tee output.txt

输出会同时出现在终端屏幕上,并被写入 output.txt 文件中。


✅ 场景2:追加写入而不是覆盖(使用 -a

date | tee -a log.txt

每次运行该命令,当前时间都会追加到 log.txt 文件末尾。


✅ 场景3:多文件写入(一次写入多个文件)

echo "Backup completed" | tee status.log history.log

📁 同一条信息会被写入 status.loghistory.log 两个文件中。


✅ 场景4:结合 sudo 写入受保护文件(技巧)

有时你想将输出写入 /etc 下的文件,但普通用户权限不足:

echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null

👮 使用 sudo tee 替代直接重定向可以避免权限问题。


✅ 场景5:在脚本中记录日志(自动化运维常用)

#!/bin/bash
exec > >(tee -a script.log) 2>&1
echo "Script started at $(date)"

📝 此方式可让整个脚本的输出都被记录进日志文件,方便后续排查问题。


✅ 场景6:配合 grep 过滤并保存日志

tail -f /var/log/syslog | grep "ERROR" | tee error_log.txt

🧹 实时监控系统日志中的错误信息,并保存下来供分析。


🧪 五、不同发行版之间的差异与注意事项

发行版 特点
Ubuntu 默认使用 GNU coreutils,支持完整 tee 功能
CentOS 7/8 默认安装,但某些高级参数(如 -p)可能未启用
EulerOS/openEuler 企业级系统,集成稳定版本,适合服务器环境
注意 若你使用的是 macOS 或 BSD 系统,tee 的部分选项行为可能略有不同

🧰 六、进阶技巧与工具配合使用

🔗 配合 pv 显示进度条(适用于大文件处理)

cat bigfile.txt | pv | tee copy.txt

📊 显示当前传输速率、完成百分比,提升可视化体验。


📄 配合 logger 记录系统日志

echo "System rebooted" | tee /var/log/reboot.log | logger

📋 同时写入本地文件和系统日志(syslog)。


🔄 配合 awksed 处理后再保存

ps aux | awk '{print $1, $2}' | tee process_list.txt

🧹 提取出进程的用户名和 PID 并保存。


🧠 七、常见问题解答(FAQ)

问题 解答
tee 是否会影响性能? 对于小数据量几乎无影响,大量数据建议结合 pv 或异步写入
如何让 tee 不覆盖文件? 使用 -a 参数进行追加写入
tee 可以写入压缩文件吗? 可以通过管道结合 gzip:`command
tee 是否能写入多个终端? 可以,只要将多个终端设备路径作为文件名传入即可(如 /dev/pts/0

📌 八、总结

tee 是一个小巧但极其强大的命令,广泛应用于日志记录、脚本调试、自动化流程监控等多个方面。掌握 tee 的使用,不仅能够帮助你更好地理解 Linux 命令行管道的工作机制,还能显著提升你在实际开发和运维中的效率。


💡 提示:你可以将 tee 加入你的日常开发习惯中,例如:

# 查看并保存配置
cat /etc/nginx/nginx.conf | tee nginx_backup.conf

或者设置别名简化操作:

alias log='tee -a ~/logfile.txt'

如有追加问题,请输入:追加问题:xxxx

posted @ 2025-06-23 22:48  红尘过客2022  阅读(295)  评论(0)    收藏  举报