转自:Linux tee Command Explained for Beginners (6 Examples)
8 Linux Tee Command with Examples
国内已有人翻译此文:为初学者介绍的 Linux tee 命令(6 个例子)
相关:Bash基础——pipe
简介
有时候,你会想手动跟踪命令的输出内容,同时又想将输出的内容写入文件,确保之后可以用来参考。如果你想寻找这相关的工具,那么恭喜你,Linux 已经有了一个叫做 tee
的命令可以帮助你。tee命令读入标准输入,并写到标准输出和文件(一个或多个)。tee命令以管道中使用的T分配器(T-splitter)命名。 它基本上打破了程序的输出,因此它既可以显示也可以保存在文件中。 它同时执行两个任务,将结果复制到指定的文件或变量中,并显示结果。见下图
stdout其实也就是屏幕了
语法
tee [OPTION]... [FILE]...
选项
- -a:附加到既有文件的后面,而非覆盖它.
- -i:忽略中断信号(即不被Ctrl+C打断)。
- --help 在线帮助。
- --version 显示版本信息。
典型用法
如何在 Linux 上使用这个命令
假设因为某些原因,你正在使用 ping
命令。
然后同时,你想要输出的信息也同时能写入文件。这个时候,tee
命令就有其用武之地了。
ping google.com | tee output.txt
可见,tee命令输出内容不仅被写入 output.txt
文件,也被显示在标准输出中。
如何确保 tee 命令追加信息到文件中?
默认情况下,在同一个文件下再次使用 tee
命令会覆盖之前的信息。如果你想的话,可以通过 -a
命令选项改变默认设置。
[command] | tee -a [file]
如何让 tee 写入多个文件?
非常简单,只需要多写明几个文件名就行了。
[command] | tee [file1] [file2] [file3]
如何让 tee 命令的输出内容直接作为另一个命令的输入内容?
下面的命令不仅会将文件名存入 output.txt
文件中,还会通过 wc
命令让你知道输入到 output.txt
中的文件数目。
如何查看日志文件并写入文件
我们可以通过tee命令分析通过apache2服务器的HTTP2流量。实时日志可以传输到标准输出,也可以写入文件以供日后进一步分析。
sudo tail -f /var/log/apache2/access.log | grep --line-buffered "HTTP/2.0" | tee -a http2.log
如何使用 tee 命令提升文件写入权限?
假如你使用 Vim 编辑器 打开文件,并且做了很多更改,然后当你尝试保存修改时,你得到一个报错,让你意识到那是一个 root用户所拥有的文件,这意味着你需要使用 sudo
权限保存修改。
如此情况下,你可以(在 Vim 内)使用 tee
命令来提高权限。
:w !sudo tee %
上述命令会向你索要 root 密码,然后就能让你保存修改了。
普通用户怎么创建root用户的文件?
sudo echo 'Documents' | sudo tee -a folder_of_root.txt
上述命令会向你索要 root 密码,然后数据就写到了folder_of_root.txt。
如何让 tee 命令忽视中断?
-i
命令行选项使 tee
命令忽视通常由 ctrl+c
组合键发起的中断信号(SIGINT
)。