
很多情况下,我们需要保存程序/命令的输出到本地,常用的一种方法是重定向,这也是一种很好的方法。但有个问题,如果你想要做后续操作,比如要统计输出的行数等,重定向就有困难了。
这时候,tee 命令就派上用场啦~
tee 语法格式:
$ tee [OPTIONS] [FILE]
这个命令有 4 个主要选项,配合这些选项可以将结果存储在一个或者多个文件中。4 个选项介绍如下:
Options:

Files:
即目标文件,可以是一个或者多个文件,用于存储 tee 命令的输出。
1. tee 命令基础用法
在 Linux 中,我们可以使用 ls -la 用来查看当前目录里文件的详细信息,想必大家都用过。现在,我们想要保存 ls -la 命令的输出到文件 output.txt 中,我们可以这样操作:
$ ls -la | tee output.txt
$ cat output.txt
Output:
在这里,第一个命令将 ls -la 的输出显示到终端,并将输出写入到文件 output.txt 。第二个命令显示了 output.txt 文件的具体内容,如下图所示:

2. 将输出追加到现有文件中
如果我们使用带有 -a 选项的 tee 命令的话,那么它会将命令的输出追加写入到现有文件,不会覆盖该文件原有的内容。
例如,我们想将 pwd 命令的输出追加到已有文件 output.txt 的末尾,可以这样运行以下命令:
$ pwd | tee -a output.txt
$ cat output.txt
在这里,第一个命令将 pwd 的输出显示到终端,并在 output.txt 文件的末尾追加 pwd 的输出。第二个命令则用于查看输出文件的内容。如下图所示, output.txt 文件包含前一个示例和当前示例的输出

[图]
3. 输出写入多个文件
tee 命令也可以将各种命令的输出存储到多个文件中。这种情况下,我们需要使用空格隔开这些文件名。比如,我们想将 date 命令的输出存储到两个文件 output1.txt 和 output2.txt 中,我们可以这样执行命令:
$ date | tee output1.txt output2.txt
$ cat output1.txt output2.txt
Output:
在这里,第一个命令显示当前系统日期,并将值存储到两个文件 output1.txt 和 output2.txt 中。第二个命令显示这两个文件的内容,具体结果如下:

4. 忽略中断信号
大家知道,命令/程序在收到中断信号时,将被信号所中断。如果 tee 命令在执行过程中不想被中断,我们可以使用带 -i 选项来忽略命令执行时的中断信号。这种情况下,即使我们按下 CTRL + C ,命令仍会正确执行。例如:
$ wc -l output.txt | tee -i output3.txt
$ cat output.txt
$ cat output3.txt
Output:
在这里,第一个命令是计算 output.txt 文件的总行数,并将输出存储到文件 output3.txt 中。第二个命令显示了 output.txt 文件的具体内容,而第三个命令显示 output3.txt 的内容,它与 wc -l output.txt 的输出相同。

5. 将 tee 命令输出通过管道传递给另一个命令
我们可以使用管道将 tee 命令的输出传递给另一个命令。在本例子中,ls 命令将输出传递给 tee 命令,tee 命令的输出传递给 wc 命令,如下所示:
$ ls | tee output4.txt | wc -lcw
$ ls
$ cat output4.txt
Output:
在这里,第一个命令用于将 ls 命令的输出写入文件 output4.txt ,并计算 output4.txt 的行数、字数和字符数。第二个命令用于显示 ls 命令的输出,第三个命令用于查看 output4.txt 文件的内容。

举报 0