news 2026/10/3 8:26:14

linux-command 仓库详解 Linux tee 命令:标准输出与文件双写实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
linux-command 仓库详解 Linux tee 命令:标准输出与文件双写实战指南
  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载

tee是 GNU coreutils 中一个极其实用的管道命令,它从标准输入读取数据,并同时把数据重定向到标准输出(通常是终端)和指定的一个或多个文件,非常适合"边查看边落盘"的场景。本文以 command/tee.md 为主体,系统讲解 tee 的语法、全部选项、--output-error错误处理模式、返回值与缓冲刷新机制,并给出可直接运行的示例,同时结合 linux-command 仓库的索引与构建机制,说明这条命令在 Linux 命令速查手册中的组织与检索方式。

tee 命令能做什么

在 Linux 管道中,数据流通常是单向的:命令A | 命令B会把 A 的输出直接交给 B,而中间结果无处保存。tee就像管道上的一个三通(其名字正源于英文的 "T" 形管件):它从标准输入读取数据,把同样的内容同时写到两个目的地:

  • 标准输出:让数据继续流向终端或下游管道;
  • 文件:按指定的 FILE 参数落盘,供后续查看或记录。

从仓库的索引数据 dist/data.json 可以看到,tee 在速查手册中的描述为"从标准输入读取数据并重定向到标准输出和文件",这正是其最核心的功能定义。常见使用场景是:需要同时查看命令输出内容,又要把内容保存到文件时。

命令语法与参数

tee [OPTION]... [FILE]...
  • OPTION(可选):行为选项,详见下一节选项详解。
  • FILE(可选):要输出的文件,可以指定一个或多个。未指定 FILE 时,tee 仅把输入复制到标准输出。

多个 FILE 参数意味着同一份数据会被同时写入所有指定文件,这在需要同时维护多份日志副本时非常有用。

选项详解

tee 的长选项与短选项等价,完整选项如下表所示:

选项说明
-a, --append追加到文件中而不是覆盖原有内容。
-i, --ignore-interrupts忽略中断信号,即 Ctrl+C 中断操作无效。
-p诊断写入非管道(即普通文件等)的错误。
--output-error[=MODE]设置写错误发生时的行为,MODE 取值见下方说明。
--help显示帮助信息并退出。
--version显示版本信息并退出。

MODE:写错误时的输出行为

--output-error选项通过MODE决定当出现写错误时 tee 如何处理,可用取值如下:

MODE行为
warn当写入到任何输出(包括管道)报错时输出诊断信息。
warn-nopipe当写入到任何输出但不是管道报错时输出诊断信息。
exit当写入到任何输出报错时立即退出。
exit-nopipe当写入到任何输出但不是管道报错时立即退出。

默认行为遵循以下规则:

  • -p选项指定的默认 MODE 为warn-nopipe;
  • 当--output-error没有出现在命令行中时,默认操作是:当写入到管道报错时立刻退出,并诊断错误信息写入到非管道输出。

简单理解:默认情况下 tee 对"下游管道破裂"非常敏感(例如下游命令提前退出导致 SIGPIPE),会立即终止;而-p则把注意力放在文件这类非管道输出上,即使管道出问题也只给出诊断而不轻易退出。这在管道下游命令可能提前结束的脚本中尤其值得注意。

返回值

tee 的返回状态为成功,除非给出了非法选项或非法参数。因此也可以把 tee 的退出码用于脚本判断:只要命令调用合法,就可以认为数据已按预期分流。

实战示例

覆盖写入多个文件

# 将进程信息通过管道输出到标准输出(终端)并覆盖写入到文件中。 ps -ef | tee info_a.log info_b.log

执行后,ps -ef的完整输出会同时显示在终端,并被写入info_a.log与info_b.log两个文件(若文件已存在则被覆盖)。

追加写入多个文件

# 将进程信息通过管道输出到标准输出(终端)并追加写入到文件中。 ps -ef | tee -a info_a.log info_b.log

加-a(--append)后,输出会被追加到文件末尾而不是覆盖,适合持续累积日志的场景。

常见扩展用法

在需要 root 权限才能写入的配置场景中,借助sudo与 tee 的组合是通用做法——例如把内容写入/etc下的配置文件:

# 将 echo 输出同时显示在终端并写入系统级配置文件 echo "options" | sudo tee /etc/modprobe.d/example.conf

在记录日志的同时继续过滤查看,也是管道中的常用组合:

# 全量输出落盘,同时终端只显示含关键字的行 ./app.sh 2>&1 | tee full.log | grep -i "error"

上述两个例子属于 tee 在标准 Shell 工作流中的通用用法,可结合自己的实际场景按需组合。

注意:缓存与刷新机制

使用 tee 时有两个需要了解的行为细节:

  1. 命令归属:tee 是GNU coreutils包中的命令,相关的帮助信息请查看man -s 1 tee或info coreutils 'tee invocation'。
  2. 存在缓存机制:tee 每1024 个字节将输出一次。若从管道接收输入数据,应该是缓冲区满才将数据转存到指定的文件中;若文件内容不到 1024 个字节,则接收从标准输入设备读入的数据后,将刷新一次缓冲区,并转存数据到指定文件。

这意味着:如果上游命令长时间没有产生足够多的数据(不足 1024 字节),文件里的内容可能不会立即更新到最新状态;而当输入结束或缓冲区被刷新时,数据才会完整落盘。在编写需要实时监控文件输出的脚本时,应把这个缓冲行为考虑进去。

tee 在 linux-command 仓库中的组织与检索

tee 作为 Linux 文件管理类命令,被收录在 linux-command 命令速查手册中,仓库内部围绕它做了如下组织:

  • 命令手册源文件:command/tee.md 是 tee 的唯一事实来源,包含本篇文章的全部内容;
  • 索引数据:构建时由 scripts/build.mjs 解析command/目录下所有.md文件,提取命令名(n)、路径(p)与描述(d)生成 dist/data.json,其中 tee 的索引条目为:
"tee": { "n": "tee", "p": "/tee", "d": "从标准输入读取数据并重定向到标准输出和文件。" }
  • 分类归属:README 的"Linux命令分类"中,tee 与cat、grep、diff、find、mv等一同归入"文件管理"类别,方便按类检索;
  • 页面渲染:template/details.ejs 负责把command/tee.md渲染为独立的 HTML 详情页,并在页面顶部提供"纠正错误""添加实例"入口;构建脚本还会把文档内部的.md相对链接改写为.html,保证静态站点内跳转可用。

如果你需要把这份手册集成到自己项目里,仓库还提供了 npm 包方式:npm install linux-command后即可通过require("linux-command/command/tee.md")拿到 Markdown 原文,或通过索引文件按命令名定位。

小结

tee 是连接"查看"与"落盘"的桥梁型命令,核心要点可归纳为:默认覆盖写入、-a追加、-i忽略中断、-p与--output-error精细控制写错误行为,以及 1024 字节缓冲刷新机制。把它与ps、grep、sudo等命令组合,即可在日志采集、配置写入、调试输出等场景中做到"一鱼两吃"。更全面的中文说明可直接查阅仓库内的 command/tee.md。

  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载
上一篇:G-Helper:轻量化华硕笔记本性能控制工具全面解析
下一篇:Awesome Copilot 中的 Expert Vue.js Frontend Engineer Agent:Vue 3 前端工程实践指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 8:21:37

Playnite:三步跑通多平台游戏库管理

Playnite:三步跑通多平台游戏库管理 【免费下载链接】Playnite Video game library manager with support for wide range of 3rd party libraries and game emulation support, providing one unified interface for your games. 项目地址: https://gitcode.com/…

作者头像 李华