最近介绍了一些linux命令,大家也慢慢体会到了linux系统的艺术。今天介绍的命令就能够深度体现数据流转的艺术。有时候我们执行一条命令后,既想在终端实时看到输出结果,又想把结果保存到文件留作备份;甚至想同时把输出保存到多个文件,手动复制粘贴又太繁琐。tee命令就能轻松解决所有问题。它就像一个“T型分流器”,一边接收命令输出,一边把内容同步给到终端和文件,高效又省心,是Linux终端里不可或缺的实用工具。tee是Linux系统自带的标准命令,核心功能是:读取标准输入的数据,同时将其输出到标准输出屏幕和一个或多个文件中。command | tee [OPTION]... [FILE]...
这是tee最常用的场景:执行命令后,终端显示结果,同时将结果写入文件。对比重定向:如果用ls -l > a.txt,终端不会显示任何内容,只能事后打开文件查看,灵活性远不如tee。 默认覆盖文件太危险?用-a选项(append,追加),可以将输出内容追加到文件末尾,不会清空原有内容,适合日志记录、分步保存输出等场景。#示例1:追加内容到message.txtecho "Hello Linux" | tee message.txt # 第一次写入,覆盖(若文件存在)echo "Hello tee" | tee -a message.txt # 追加写入,不会覆盖原有内容
如果需要将同一个命令的输出,同时保存到多个文件(比如一份本地备份、一份远程同步文件),不用多次执行命令,只需在tee后跟上多个文件名即可。#示例:将echo的输出同时写入1.txt、2.txt、3.txtecho "Linux学习指南" | tee 1.txt 2.txt 3.txt
执行后效果:终端显示“Linux 学习指南”,同时三个文件都会被写入相同内容,效率直接拉满。也可以结合-a选项,同时追加到多个文件:echo "tee命令学习" | tee -a 1.txt 2.txt 3.txt
执行长时间命令(比如编译、系统更新)时,如果不小心按了Ctrl+C中断命令,tee默认会停止写入文件,导致输出不完整。用-i选项(忽略中断信号),即使按下Ctrl+C,tee也会继续完成文件写入,确保输出内容完整留存。# 示例:在代码编译程序,忽略中断,确保日志完整保存make 2>&1 | tee -i build.log
在shell脚本中,tee是日志记录的绝佳工具,能将脚本执行过程中的输出,同时显示在终端和日志文件中,方便实时监控和后续排查。#!/bin/bash#定义日志文件LOG_FILE="backup.log"#记录脚本开始时间,同时输出到终端和日志echo "[$(date +'%Y-%m-%d %H:%M:%S')] 备份开始..." | tee -a $LOG_FILE#执行备份命令,记录输出cp -r /data /data/backup | tee -a $LOG_FILE#记录备份结束时间echo "[$(date +'%Y-%m-%d %H:%M:%S')] 备份完成!" | tee -a $LOG_FILE
选项 | 作用 | 示例 |
|---|
-a | 追加写入文件,不覆盖 | echo "test" | tee -a test.txt |
-i | 忽略中断信号(Ctrl+C) | make | tee -i build.log |
很多同学会混淆tee和重定向(>、>>),这里用表格清晰区分,避免用错:场景 | tee命令 | 重定向(>/>>) |
|---|
实时查看输出 | 支持(原生功能) | 不支持(仅写入文件) |
写入文件 | 支持(覆盖/追加) | 支持(覆盖/追加) |
多文件写入 | 支持(一行命令搞定) | 不支持(需多次重定向) |
1.基础:command | tee 文件名,边看边存;2.常用:command | tee -a 文件名,追加日志;不管是日常终端操作,还是脚本编写、系统运维,tee都是一个能帮你节省时间的小工具。赶紧动手试试,把它融入到你的Linux操作流程中吧~