张芷铭的个人博客

tee

tee 是 Linux 中一个非常实用的命令,它就像一个三通管接头,能够将数据同时导向两个地方:一个是标准输出(通常就是终端屏幕),另一个或多个是你指定的文件。

基本语法与核心功能

tee 命令的基本语法如下:

1
tee [OPTION]... [FILE]...

它的核心功能是:从标准输入读取数据,然后将数据同时写入标准输出和每一个指定的文件

主要选项参数

tee 命令的选项不多,但都非常实用。

选项全称作用
-a--append追加到文件末尾,而不是覆盖原有内容。
-i--ignore-interrupts忽略中断信号(如 Ctrl+C),使命令执行更稳定。

常见用法与实例

下面通过一些具体例子来看看 tee 命令的强大之处。

  1. 基础用法:同时显示并保存输出 这是最经典的用法。下面的命令将 ls 的结果既显示在屏幕上,又保存到 file_list.txt 文件中。

    1
    
    ls -l | tee file_list.txt
    

    如果 file_list.txt 已存在,默认会被覆盖。

  2. 追加内容到文件 使用 -a 选项可以将新内容添加到文件末尾,而不会清空旧内容。

    1
    
    echo "New log entry" | tee -a logfile.txt
    
  3. 同时写入多个文件 tee 可以一次性将内容写入多个文件。

    1
    
    dmesg | tee system_info.txt backup_info.txt
    

    执行后,dmesg 的输出会同时写入 system_info.txtbackup_info.txt 两个文件。

  4. 在管道中充当“检查点” 这是 tee 的一个高级技巧。你可以将一个长管道流程分段,用 tee 把中间结果保存下来,既方便调试,又能把结果传递给下一个命令。

    1
    
    ls *.txt | tee file_list.txt | wc -l
    

    这个命令会: 1. 列出所有 .txt 文件; 2. 将列表保存file_list.txt; 3. 同时将列表传递给 wc -l 统计行数。

  5. 捕获标准错误输出 如果你想同时保存命令的正常输出和错误信息,可以结合标准错误重定向。

    1
    
    some_script.sh 2>&1 | tee output_and_error.log
    

    2>&1 将标准错误重定向到标准输出,这样 tee 就能捕获所有信息。

  6. 多次输出到屏幕 将文件名指定为 -,可以让 tee 将输入内容多次发送到标准输出。这个技巧有时用于放大某个操作的可见性,或者在需要多次重复输入流的特殊脚本中。

    1
    
    echo "Hello" | tee -
    

    这会在屏幕上显示两次 “Hello”。

注意事项与使用场景

  • 覆盖风险:默认情况下,tee 会覆盖目标文件。如果不希望丢失原内容,务必记得使用 -a 选项进行追加。
  • 常见场景
    • 脚本调试与日志记录:在复杂的管道命令中插入 tee,可以保存中间结果以供检查。
    • 安装软件或编译程序:实时查看进度的同时,将详细的输出信息保存到日志文件。
    • 需要同时监控和记录的任务:例如系统备份、长时间运行的批处理任务等。

tee 命令的精髓在于它的“一分为二”能力,完美解决了“既想看到过程,又想留下记录”的需求。

💬 评论