linux tee命令详解
Linux tee
tee - 从标准输入读入并写往标准输出和文件
把标准输入的数据复制到文件列表中的每一个文件,同时送往标准输出。
用法:tee [选项]... [文件列表]...
-a, --append | 追加到给出的文件,而不是覆盖 |
-i, --ignore-interrupts | 忽略中断信号 |
-p | 对写入非管道的行为排查错误 [ -p 选项的默认模式是“warn-nopipe”。] |
--output-error[=模式] | 设置写入出错时的行为。见下面“模式”部分 |
--help | 显示此帮助信息并退出 |
--version | 显示版本信息并退出 |
模式确定向输出写入出错时的行为:
'warn' | 对向任何文件输出出错的情况进行诊断 |
'warn-nopipe' | 对向除了管道以外的任何文件输出出错的情况进行诊断 |
'exit' | 一旦输出出错,则退出程序 |
'exit-nopipe' | 一旦输出出错且非管道,则退出程序 |
当 --output-error 没有给出时,默认的操作是在向管道写入出错时立刻退出,且在向非管道写入出错时对问题进行诊断。 |
示例
1. 在输出到控制台的时候,将内容保存到uptime.log
[root@nan ~]# uptime |tee uptime.log
11:44:09 up 14 min, 1 user, load average: 0.01, 0.06, 0.09
[root@nan ~]# cat uptime.log
11:44:09 up 14 min, 1 user, load average: 0.01, 0.06, 0.09
2. 往已有文件追加内容,这个时候我们可以使用-a参数来实现:
[root@nan ~]# who | tee -a uptime.log
root pts/0 2022-05-27 11:31 (192.168.128.1)
[root@nan ~]# cat uptime.log
11:44:09 up 14 min, 1 user, load average: 0.01, 0.06, 0.09
root pts/0 2022-05-27 11:31 (192.168.128.1)
3. 内容输出到多个文件,我们直接在tee命令后面直接添加对应的文件:
[root@nan ~]# who | tee w.log h.log
root pts/0 2022-05-27 11:31 (192.168.128.1)
[root@nan ~]# cat w.log
root pts/0 2022-05-27 11:31 (192.168.128.1)
[root@nan ~]# cat h.log
root pts/0 2022-05-27 11:31 (192.168.128.1)
4. 重复多次标准输入内容,使用tee - - -
[root@nan ~]# echo “----------welcome back---------” | tee - -
“----------welcome back---------”
“----------welcome back---------”
“----------welcome back---------”
5. 静默输出到文件,通过将输出重定向到/dev/null 达到静默效果
[root@nan ~]# hostname|tee hostname.list >/dev/null
[root@nan ~]# cat hostname.list
nan
6. 将错误信息也输出到文件中
tee命令默认将标准输入的普通信息输出到文件,错误信息丢弃,通过如下方式可以实现将错误信息也同步输入到文件
[root@nan ~]# ls "no" | tee no.log
ls: 无法访问no: 没有那个文件或目录
[root@nan ~]# cat no.log 空文件
[root@nan ~]# ls "no" 2>&1 |tee no2.log
ls: 无法访问no: 没有那个文件或目录
[root@nan ~]# cat no2.log
ls: 无法访问no: 没有那个文件或目录
7. 直接通过键盘往文件输入,使用^d 命令结束输入
[root@nan ~]# tee 1.txt > /dev/null
hello
world
[root@nan ~]# cat 1.txt
hello
world
8. 忽略中断信号 “-i” 参数使用示例
正常情况下使用 ^c 会结束输入,当时有 -i 参数时中断操作指令 ^c 无效,只可以使用 ^d 结束输入。
[root@nan ~]# tee -i 1.txt > /dev/null
hello
^C //^c 无效
world
[root@nan ~]# cat 1.txt
hello
world