Linux【2】-管理文件-6-tee重定向输出到多个文件

tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。简单的说就是把数据重定向到给定文件和屏幕上。

存在缓存机制,每1024个字节将输出一次。若从管道接收输入数据,应该是缓冲区满,才将数据转存到指定的文件中。若文件内容不到1024个字节,则接收完从标准输入设备读入的数据后,将刷新一次缓冲区,并转存数据到指定文件。

一、用法说明

语法:

tee(选项)(参数)

选项:

-a:向文件中重定向时使用追加模式;
-i:忽略中断(interrupt)信号。

参数:

文件:指定输出重定向的文件。在终端打印stdout同时重定向到文件中

常见格式

  • 格式:tee

  • 只输出到标准输出,因为没有指定文件嘛。

  • 格式:tee file

    • 输出到标准输出的同时,保存到文件file中。如果文件不存在,则创建;如果已经存在,则覆盖之。(If a file being written to does not already exist, it is created. If a file being written to already exists, the data it previously contained is overwritten unless the `-a' option is used.)
  • 格式:tee -a file

  • 输出到标准输出的同时,追加到文件file中。如果文件不存在,则创建;如果已经存在,就在末尾追加内容,而不是覆盖。

  • 格式:tee -

  • 输出到标准输出两次。(A FILE of ’-' causes `tee' to send another copy of input to standard output, but this is typically not that useful as the copies are interleaved.)

  • 格式:tee file1 file2 -

  • 输出到标准输出两次,同时保存到file1和file2中。

二、例子说明

2.1 如何在 Linux 上使用这个命令?

ping google.com | tee output.txt

这个输出内容不仅被写入 output.txt 文件,也被显示在标准输出中。

2.2 如何确保 tee 命令追加信息到文件中?

默认情况下,在同一个文件下再次使用 tee 命令会覆盖之前的信息。如果你想的话,可以通过 -a 命令选项改变默认设置。

[command] | tee -a [file]

基本上,-a 选项强制 tee 命令追加信息到文件。

2.3 如何让 tee 写入多个文件?

这非常之简单。你仅仅只需要写明文件名即可。

[command] | tee [file1] [file2] [file3]

比如:

ping google.com | tee output1.txt output2.txt output3.txt

2.4 如何让 tee 命令的输出内容直接作为另一个命令的输入内容?

使用 tee 命令,你不仅可以将输出内容写入文件,还可以把输出内容作为另一个命令的输入内容。比如说,下面的命令不仅会将文件名存入 output.txt 文件中,还会通过 wc 命令让你知道输入到 output.txt 中的文件数目。

ls file* | tee output.txt | wc -l

2.5 如何使用 tee 命令提升文件写入权限?

假如你使用 Vim 编辑器打开文件,并且做了很多更改,然后当你尝试保存修改时,你得到一个报错,让你意识到那是一个 root 所拥有的文件,这意味着你需要使用 sudo 权限保存修改。

如此情况下,你可以(在 Vim 内)使用 tee 命令来提高权限。

:w !sudo tee %

上述命令会向你索要 root 密码,然后就能让你保存修改了。

2.6 如何让 tee 命令忽视中断?

-i 命令行选项使 tee 命令忽视通常由 ctrl+c 组合键发起的中断信号(SIGINT)。

[command] | tee -i [file]

当你想要使用 ctrl+c 中断该命令,同时让 tee 命令优雅的退出,这个选项尤为实用。

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn