游客
Linux tee 命令:标准输出分流与文件写入功能详解

Linux tee 命令:标准输出分流与文件写入功能详解

一言准备中...

一、核心功能与数据流向

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. 指定文件

五、易错点总结

  1. 不加 -a 默认覆盖文件:日志场景务必加 -a,否则前一次日志被清空
  2. 权限不足处理sudo 命令 > 文件 报错时,改用 命令 | sudo tee 文件
  3. stderr 不处理:tee 只能接收管道前的标准输出(stdout),不处理标准错误(stderr)

六、拓展:同时保存标准输出 + 标准错误

ls /nonexist 2>&1 | tee -a log.txt

  • 2>&1 将标准错误(stderr)重定向到标准输出(stdout)
  • tee 接收到合并后的数据流,同时保存正常输出和报错信息
  • 本文作者:站长
  • 本文链接: https://www.zhujishice.cn/176.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
0
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
106
0
0
0
内卷太严重,已躺平...

Docker镜像与容器导入导出操作详解

上一篇

Windows Server 2003与2008系统ICMP(Ping)规则配置方法

下一篇
评论区
内容为空

这一切,似未曾拥有

  • 复制图片
按住ctrl可打开默认菜单