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 ~]#