Linux命令-按照与使用(12) 可以把输出重定向到文件中(tee)

tee命令介绍

Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。

tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。

tee是一个简单的命令,可以将命令的标准输命出保存为文件并同时进行显示。在想要保存并同时查看性能工具输出的时候,tee是很有帮助的。比如,正在监控一个实时系统的性能统计信息的同时,保存这些数据以备将来对它们进行分析。

用途说明

在执行Linux命令时,我们可以把输出重定向到文件中,比如 ls >a.txt,

这时我们就不能看到输出了,如果我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee命令了。

tee命令读取标准输入,把这些内容同时输出到标准输出和(多个)文件中,tee命令可以重定向标准输出到多个文件。

注意:在使用管道线时,前一个命令的标准错误输出不会被tee读取。

语法

tee [-ai][--help][--version][文件...]
tee获取由<command>提供的输出,在将其保存到指定文件的同时也显示到标准输出设备。如果特别指定了-a选项,则tee会将输出添加到文件上,而不是覆盖文件。

参数:

-a或--append  附加到既有文件的后面,而非覆盖它.
-i或--ignore-interrupts  忽略中断信号。
--help  在线帮助。
--version  显示版本信息。

常用参数

格式: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中。

用法示例:

示例1、用tee来记录vmstat的输出

用tee来记录vmstat的输出。如你所见,tee 显示了vmstat生成的输出,并同时将其保在到文件 /tmp/vmstat_out保存vmstat的输出能让我们在将来的时间里对性能数据进行分析或绘图。

[isunland@localhost ~]$ vmstat 1 5 | tee /tmp/vmstat_out
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 14353024   5180 531136    0    0     8     1   13   19  0  0 100  0  0
 0  0      0 14353032   5180 531136    0    0     0     0  163  202  0  0 100  0  0
 0  0      0 14353032   5180 531140    0    0     0     0   84  150  0  0 100  0  0
 0  0      0 14353032   5180 531140    0    0     0     0   97  172  0  0 100  0  0
 0  0      0 14353032   5180 531140    0    0     0     0  111  188  0  0 100  0  0

tee命令很简单,但由于它能轻松地记录指令性能工具的输出,因此它的能力也很非常强大的。

示例2、tee命令与重定向的对比

[root@web ~]# seq 2 >1.txt 
[root@web ~]# cat 1.txt 
1
2
[root@web ~]# cat 1.txt >2.txt 
[root@web ~]# cat 1.txt | tee 3.txt 
1
2
[root@web ~]# cat 2.txt 
1
2
[root@web ~]# cat 3.txt 
1
2
[root@web ~]# cat 1.txt >>2.txt 
[root@web ~]# cat 1.txt | tee -a 3.txt 
1
2
[root@web ~]# cat 2.txt 
1
2
1
2
[root@web ~]# cat 3.txt 
1
2
1
2

示例3、使用tee命令重复输出字符串

[root@web ~]# echo 12345 | tee 
12345

[root@web ~]# echo 12345 | tee - 
12345
12345
[root@web ~]# echo 12345 | tee - - 
12345
12345
12345
[root@web ~]# echo 12345 | tee - - - 
12345
12345
12345
12345
[root@web ~]# echo 12345 | tee - - - - 
12345
12345
12345
12345
12345

示例4、使用tee命令把标准错误输出也保存到文件(2>&1)

[root@web ~]# ls "*" 
ls: *: 没有那个文件或目录
[root@web ~]# ls "*" | tee - 
ls: *: 没有那个文件或目录
[root@web ~]# ls "*" | tee ls.txt 
ls: *: 没有那个文件或目录
[root@web ~]# cat ls.txt 
# 要注意的是:在使用管道线时,前一个命令的标准错误输出不会被tee读取。
# -------------------------
# 2>&1 把标准错误输出转成标准输出
[root@web ~]# ls "*" 2>&1 | tee ls.txt 
ls: *: 没有那个文件或目录
[root@web ~]# cat ls.txt 
ls: *: 没有那个文件或目录
[root@web ~]#

posted @ 2022-09-02 15:43  muzlei  阅读(1435)  评论(0编辑  收藏  举报