- 文档
- 教程
【免费下载链接】linux-command
Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux
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 时有两个需要了解的行为细节:
- 命令归属:tee 是
GNU coreutils包中的命令,相关的帮助信息请查看man -s 1 tee或info coreutils 'tee invocation'。 - 存在缓存机制: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
相关推荐
linux-command 仓库 cp 命令详解:Linux 文件复制的完整实战指南
linux command 仓库 cp 命令详解:Linux 文件复制的完整实战指南 本指南以 linux command 仓库中的 command/cp.md
文档教程Linux traceroute 命令详解:Linux Command 仓库中的路由追踪实战指南
Linux traceroute 命令详解:Linux Command 仓库中的路由追踪实战指南 traceroute 是 Linux 网络排障中定位"数据包走
文档教程Linux printf 命令详解:bash 内建与 GNU coreutils 双版本格式化输出实战指南(linux-command 项目)
Linux printf 命令详解:bash 内建与 GNU coreutils 双版本格式化输出实战指南(linux command 项目) printf 是
文档教程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考