三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

【Linux】tee 命令使用详解

【Linux】tee 命令使用详解

一、tee 命令概述

tee是 Linux/Unix 系统中数据流分流的核心命令,名称源自 T 型三通管道,形象描述其功能:从标准输入读取数据,同时输出到屏幕(标准输出)和一个 / 多个文件。

它完美解决 “既要实时看输出、又要留存日志” 的需求,是运维调试、脚本日志、权限写入的必备工具,区别于普通重定向>/>>,保留终端显示是其核心优势。

二、基本语法

执行命令:man tee查看官方手册

命令 | tee [选项] 文件名1 文件名2 ...
  • 从管道 / 标准输入读取数据
  • 同时输出到:终端屏幕 + 指定文件
  • 支持多文件输出,空格分隔即可

三、命令选项及作用

选项长选项作用说明
-a--append追加写入文件,不覆盖原有内容
-i--ignore-interrupts忽略中断信号(如Ctrl+C),保证写入完整
-p--output-error对非管道写入错误做诊断提示
-u-无缓冲写入,实时输出
--help-显示帮助信息并退出
--version-输出版本信息并退出

四、常用命令示例

1. 基础用法:屏幕显示 + 覆盖写入文件

ls -l | tee file_list.txt
  • 终端实时显示目录列表
  • 同时覆盖写入file_list.txt,文件已存在则清空重写

2. 追加模式:不覆盖,尾部添加内容

echo "新增日志内容" | tee -a run.log
  • 保留文件原有数据,新内容追加到末尾
  • 适合持续记录脚本 / 命令运行日志

3. 同时写入多个文件

dmesg | tee kernel.log /tmp/dmesg.bak
  • 一份输入,同时输出到多个文件,高效备份

4. 忽略中断信号(长时间任务必备)

ping www.baidu.com | tee -i ping.log
  • Ctrl+C中断时,仍保证已输出内容完整写入文件

5. 无缓冲实时写入(监控场景)

tail -f access.log | tee -u realtime_backup.log
  • 禁止数据缓冲,日志实时同步到备份文件

6. 配合 sudo 写入权限文件(经典场景)

普通重定向>无权限,tee可绕过:

echo "export PATH=\$PATH:/usr/local/bin" | sudo tee -a /etc/profile
  • 直接修改系统配置文件,无需切换 root 用户

7. 只写入文件,不显示屏幕

ps aux | tee process.txt > /dev/null
  • 输出重定向到黑洞,仅留存文件,不占用终端

8. 捕获标准错误(完整日志)

make 2>&1 | tee build.log
  • 2>&1将错误输出合并到标准输出,完整留存编译日志

五、高级应用:脚本全程日志记录

#!/bin/bash # 脚本功能:备份数据并留存完整日志 exec 2>&1 # 合并标准错误 exec > >(tee backup_$(date +%Y%m%d).log) # 全程分流输出 echo "【$(date)】开始备份任务..." tar -czf /backup/data.tar.gz /data/ echo "【$(date)】备份完成,文件大小:$(du -h /backup/data.tar.gz | awk '{print $1}')"
  • 脚本所有输出实时显示 + 自动归档,便于事后排查问题

六、退出状态说明

  • 0:所有输出目标写入成功
  • >0:至少一个文件写入失败(其他成功文件仍保留)

七、核心总结

  1. 核心作用:一进多出,屏幕 + 文件同时输出
  2. 默认行为:覆盖写入,需追加用-a
  3. 高频组合:sudo tee解决权限问题,2>&1捕获完整日志
  4. 适用场景:运维调试、脚本日志、实时监控、权限写入
← 返回列表