00326 tee 命令


前言

tee命令

Operating System: Ubuntu 22.04.4 LTS

介绍

tee 是 Linux 和类 Unix 系统中的一个常用命令行工具,主要用于将标准输入(stdin)的数据同时输出到标准输出(stdout)和一个或多个文件中。它的名称来源于英文单词 “teeth”,形象地表示数据像牙齿一样被 “咬住” 并分流到不同目标。

核心功能

  • 复制输入到文件和屏幕:将管道(pipe)或命令的输出同时保存到文件和终端。
  • 支持追加写入:避免覆盖原有文件内容。
  • 处理多文件输出:可将数据写入多个文件。

基本语法

tee [选项] [文件1] [文件2] ...

常用选项

选项 说明
-i--ignore-interrupts 忽略中断信号(如 Ctrl+C),强制完成写入
-a--append 追加内容到文件(默认覆盖文件)
-p--output-error 指定错误处理模式(如 ignorewarnexit
--help 显示帮助信息
--version 显示版本信息

示例场景

基础用法:保存命令输出到文件

# 将 `ls` 的输出同时显示在屏幕和 `file.txt` 中
ls -l | tee file.txt
  • 效果:屏幕显示 ls -l 的结果,同时内容被写入 file.txt(若文件存在则覆盖)。

追加写入文件

# 将 `date` 命令的输出追加到 `log.txt` 中
date | tee -a log.txt
  • 效果:每次执行都会在 log.txt 末尾添加当前日期,不覆盖原有内容。

多文件输出

# 将 `echo "Hello"` 的输出同时写入两个文件
echo "Hello" | tee file1.txt file2.txt
  • 效果file1.txtfile2.txt 均包含 “Hello”。

结合脚本和重定向

# 将脚本输出保存到文件,同时保留原始输出流
./my_script.sh | tee script.log
  • 注意tee 不会截断原始输出流,因此后续仍可通过管道传递数据:

    ./my_script.sh | tee script.log | grep "error"

忽略中断信号

# 即使按 Ctrl+C,仍强制完成写入
dd if=/dev/sda of=backup.img | tee -i backup.log

关键特性

  1. 保留原始输出流
    tee 不会截断管道的输出流,后续命令仍可接收数据:

    # 既能保存日志,又能过滤错误
    my_command | tee output.log | grep "ERROR"
  2. 与重定向的区别

    • >>> 会直接覆盖/追加文件,但会截断管道输出流。
    • tee 允许同时保留屏幕输出和文件写入,且不影响后续管道操作。
  3. 权限处理

    • 若文件不可写,tee 会报错并停止写入(除非使用 -p 指定错误模式)。

常见问题

  • Q:如何将 tee 的输出同时发送到多个地方(如文件、网络)?
    A:结合管道和 tee

    command | tee file1.txt | nc example.com 1234
  • Q:如何避免 tee 覆盖文件?
    A:使用 -a 追加模式:

    command | tee -a existing_file.txt

替代方案

  • cat > file + 重定向

    # 传统方法,但会截断管道输出
    command > file.txt 2>&1
  • script 命令
    录制终端会话,但功能更复杂。

适用场景

  • 实时查看日志并保存副本
  • 脚本中需要同时记录操作和显示结果
  • 数据需要分发给多个处理流程(如文件 + API 调用)

掌握 tee 可以显著提升数据处理效率,尤其在需要同时记录和操作输出的场景中非常实用。

结语

第三百二十六篇博文写完,开心!!!!

今天,也是充满希望的一天。


文章作者: LuYF-Lemon-love
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LuYF-Lemon-love !
  目录