Linux系统之tee命令的基本使用
- 一、tee命令介绍
- 二、tee命令的使用帮助
- 2.1 tee命令的help帮助
- 2.2 tee命令帮助解释
- 三、tee命令的基本使用
- 3.1 写入文件
- 3.2 追加文件
- 3.3 结合sudo命令
- 3.4 结合EOF使用
- 四、注意事项
一、tee命令介绍
tee 是 Linux 和 Unix 系统中的一个命令,用于从标准输入读取数据,并将其写入到标准输出和一个或多个文件中。它的名字来源于 T 型管的概念,在管道系统中,T 型管用来将流体分流到两个方向。在命令行环境中,tee 用来把信息“分叉”,一份送到屏幕(或下一个命令),另一份则保存到文件中。
二、tee命令的使用帮助
2.1 tee命令的help帮助
在命令行终端中,我们使用
--help
选项查询tee命令的基本帮助信息。
[root@RockyLinux-server001 ~]# tee --help
用法:tee [选项]... [文件]...
将标准输入复制到每个指定文件,并显示到标准输出。-a, --append 内容追加到给定的文件而非覆盖-i, --ignore-interrupts 忽略中断信号-p 对写入非管道的行为排查错误--output-error[=模式] 设置写入出错时的行为。见下面“模式”部分--help 显示此帮助信息并退出--version 显示版本信息并退出模式确定向输出写入出错时的行为:'warn' 对向任何文件输出出错的情况进行诊断'warn-nopipe' 对向除了管道以外的任何文件输出出错的情况进行诊断'exit' 一旦输出出错,则退出程序'exit-nopipe' 一旦输出出错且非管道,则退出程序
-p 选项的默认模式是“warn-nopipe”。
当 --output-error 没有给出时,默认的操作是在向管道写入出错时立刻退出,
且在向非管道写入出错时对问题进行诊断。GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告任何翻译错误
完整文档 <https://www.gnu.org/software/coreutils/tee>
或者在本地使用:info '(coreutils) tee invocation'
2.2 tee命令帮助解释
- 基本格式:
command | tee [options] outputfile
- 使用帮助:
选项 | 描述 |
---|---|
-a , --append | 将内容追加到给定的文件而非覆盖。 |
-i , --ignore-interrupts | 忽略中断信号,如 Ctrl+C。 |
-p | 对写入非管道的行为进行错误排查。 |
--output-error[=模式] | 设置写入出错时的行为。见下表“模式”部分。 |
--help | 显示此帮助信息并退出。 |
--version | 显示版本信息并退出。 |
模式 | 描述 |
---|---|
'warn' | 对向任何文件输出出错的情况进行诊断。 |
'warn-nopipe' | 对向除了管道以外的任何文件输出出错的情况进行诊断。 |
'exit' | 一旦输出出错,则退出程序。 |
'exit-nopipe' | 一旦输出出错且非管道,则退出程序。 |
默认情况下,-p
选项的模式是 'warn-nopipe'
。当没有指定 --output-error
时,默认操作是在向管道写入出错时立刻退出,并在向非管道写入出错时对问题进行诊断。
三、tee命令的基本使用
3.1 写入文件
将 ls 命令的结果同时输出到屏幕和名为 test.txt 的文件中
[root@RockyLinux-server001 ~]# ls | tee test.txt
aa01.txt
aa02.txt
aa03.txt
aa04.txt
aa05.txt
aa06.txt
anaconda-ks.cfg
test.txt
3.2 追加文件
将 cat somefile 的输出追加到abc.txt文件中而不覆盖它,并且也在屏幕上显示:
cat abc.txt | tee -a abc.txt
[root@RockyLinux-server001 ~]# echo hello > abc.txt
[root@RockyLinux-server001 ~]# cat abc.txt | tee -a abc.txt
hello
[root@RockyLinux-server001 ~]# cat abc.txt
hello
hello
3.3 结合sudo命令
如果尝试使用 tee 向一个需要管理员权限的文件写入,则需要结合 sudo 使用。例如:
echo "data" | sudo tee /path/to/protected/file
3.4 结合EOF使用
使用 sudo tee 结合 here document(<<EOF … EOF)的语法,可以在具有管理员权限的情况下将多行文本内容写入文件中。具体来说,下面这行命令会将从 <<EOF 开始直到下一个 EOF 之间的所有行作为输入,通过 sudo tee 写入到 mytest.aa 文件中,同时这些内容也会显示在标准输出上。
sudo tee mytest.aa <<EOF
aa
bb
cc
dd
ee
EOF
四、注意事项
-
使用
sudo tee
而不是sudo
与echo
结合来确保整个命令链具有正确的权限,避免权限不足的问题。 -
默认情况下
tee
会覆盖目标文件内容,使用-a
选项可改为追加内容到文件末尾而不破坏原有数据。 -
当使用
tee
处理敏感信息时,注意不要将敏感数据无意中写入日志或不安全的文件位置。 -
结合
-p
选项可以使得tee
在遇到写入错误时输出诊断信息,有助于故障排查。 -
使用
--output-error
可以更细粒度地控制tee
在面对不同类型的写入错误时的行为。