tee命令从标准输入读取内容并同时写入标准输出与一个或多个文件。tee命令常与管道以及其他命令结合使用。
在本教程中,我们将说明如何使用tee命令和常见的选项。这其中包括使用tee写入多个文件,追加到文件,忽略中断,隐藏tee命令终端标准输出,tee与sudo组合使用。
在讨论如何使用tee命令之前,让我们先回顾一下基本语法,这是tee命令的基本语法形式tee [OPTIONS] [FILE]
。
FILE
可以是一个或多个文件,OPTIONS
是tee的选项,以下是一些常用的选项。
-a
/--append
表示追加到指定的文件,如果你不想文件的内容被覆盖请使用这个选项。在没有该选项时,tee命令将会覆盖文件已存在的内容。
-i
/--ignore-interrupts
表示忽略中断信号,也就是说会忽略ctrl+c
。--help
表示查看所有可用的选项。
写入文件
tee命令的最基本用法是将另一个命令的标准输出写入到文件。除了写入单个文件之外tee也可以写入多个文件。
如你需要写入到多个文件,只需在tee命令之后指定多个文件名并使用空格分隔的文件名。
如果您不想tee
命令写入到标准输出,通常是终端的显示输出,您只需将其重定向到空设备/dev/null
。
echo "myfreax" | tee file1 file2 #写入到多个文件中
command | tee -a file.out #追加内容到文件
command | tee -i file.out #忽略中断命令
command | tee file.out >/dev/null #隐藏tee的标准输出
tee与sudo重定向
如果您尝试将sudo命令的输出重定向到用户没有写权限的文件,则会收到权限拒绝的错误消息permission denied
。
例如命令sudo echo "test" > /root/file.txt
使用echo和重定向操作符>
,将标准输出重定向到/root/file.txt
文件。
你将会收到错误消息bash: /root/file.txt: Permission denied。
之所以会这样,是因为标准输出的重定向>
是以您登录的用户而不是sudo指定的用户运行。重定向在调用sudo
命令之前发生。
一种解决方案是使用sudo sh -c
以root用户创建子shell进程运行命令。另一种解决方是将普通用户的标准输出通过管道传递给到tee
命令。
sudo echo "test" > /root/file.txt
bash: /root/file.txt: Permission denied
echo "newline" | sudo tee -a /etc/file.conf
结论
到目前为止,您应该很好地理解如何使用tee命令。如果您有任何问题或反馈。