Linux中的9个tee命令示例

系统 Linux
在本指南中,我们将对Linux tee命令进行更多详细的说明,并使用一些示例来演示其用法。

Linux Tee命令是一个命令行工具,它从标准输入中读取结果,并将结果写入标准输出和文件中。使用Linux中的tee命令可以一举两得:从标准输入读取结果,同时将结果打印到文件和标准输出。还是不懂,这是什么意思?在本指南中,我们将对Linux tee命令进行更多详细的说明,并使用一些示例来演示其用法。

Tee命令语法

tee命令语法非常简单,采用以下格式:

  1. $tee 选项 文件 

以下是可以与tee命令一起使用的一些选项:

  1. linuxmi@linuxmi:~/www.linuxmi.com$ tee --help 
  2. 用法:tee [选项]... [文件]... 
  3. 将标准输入复制到每个指定文件,并显示到标准输出。 
  4.  
  5.   -a, --append        内容追加到给定的文件而非覆盖 
  6.   -i, --ignore-interrupts    忽略中断信号 
  7.   -p                        对写入非管道的行为排查错误 
  8.       --output-error[=模式]   设置写入出错时的行为。见下面“模式”部分 
  9.       --help        显示此帮助信息并退出 
  10.       --version        显示版本信息并退出 
  11.  
  12. 模式确定向输出写入出错时的行为: 
  13.   'warn'         对向任何文件输出出错的情况进行诊断 
  14.   'warn-nopipe'  对向除了管道以外的任何文件输出出错的情况进行诊断 
  15.   'exit'         一旦输出出错,则退出程序 
  16.   'exit-nopipe'  一旦输出出错且非管道,则退出程序 
  17. -p 选项的默认模式是“warn-nopipe”。 
  18. 当 --output-error 没有给出时,默认的操作是在向管道写入出错时立刻退出, 
  19. 且在向非管道写入出错时对问题进行诊断。 

在tee命令的语法中,文件指的是一个或多个文件。

让我们看看这个命令是如何使用的。

示例1 – tee命令的基本用法

如前所述,tee命令的主要功能是显示命令(stdout)的输出并将其保存到一个文件中。在下面的示例中,我们检查系统中的块设备并将结果发送到tee命令,tee命令将输出显示到终端,同时将其保存在名为www.linuxmi.com .txt的新文件中:

  1. linuxmi@linuxmi:~/www.linuxmi.com$ lsblk | tee www.linuxmi.com.txt 

可以使用cat命令检查www.linuxmi.com.txt文件的内容,如下所示:

  1. cat www.linuxmi.com.txt 

示例2 – 使用tee将命令输出保存到多个文件

此外,您可以将命令的输出写入几个空格分隔的文件,如下面的语法所示。

  1. $ command | tee file1 file2 file3 . . .  
  2. linuxmi@linuxmi:~/www.linuxmi.com$ hostnamectl | tee linuxmi.txt linuxmi.com.txt 

同样,您可以使用cat命令确认两个文件中的输出是否存在,如下所示:

  1. cat linuxmi.txt 
  2. cat linuxmi.com.txt 

示例3 – 禁止在屏幕输出tee命令

如果要隐藏或禁止tee命令在屏幕上打印输出,请将输出重定向到/dev/null,如图所示:

  1. $ command | tee file > /dev/null 

例如,

  1. linuxmi@linuxmi:~/www.linuxmi.com$ df -Th | tee linuxmi.txt > /dev/null 
  2. linuxmi@linuxmi:~/www.linuxmi.com$ uname -a | tee linuxmi.txt > /dev/null 
  3. linuxmi@linuxmi:~/www.linuxmi.com$ cat linuxmi.txt 
  4. Linux linuxmi 5.4.0-48-generic #52-Ubuntu SMP Thu Sep 10 10:58:49 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux 

示例4 – 使用tee命令将输出附加到文件

默认情况下,tee命令覆盖文件的内容(比如示例3)。要附加输出并防止擦除当前内容,请使用-a或–append选项。

  1. $ command | tee -a file 

在第二个命令中,如图所示,我们将date命令的输出附加到linuxmi.com.txt,其中已经包含了关于系统上USB设备的信息。

  1. linuxmi@linuxmi:~/www.linuxmi.com$ lsusb | tee linuxmi.com.txt 
  2. linuxmi@linuxmi:~/www.linuxmi.com$ date | tee -a linuxmi.com.txt 

示例5 – 将tee与sudo命令一起使用

假设作为sudo用户,您希望在根用户拥有的文件上进行写入。当然,任何提升的操作都需要在命令之前调用sudo用户。

要实现这一点,只需在tee命令前面添加sudo,如下所示。

  1. linuxmi@linuxmi:~/www.linuxmi.com$ echo “192.168.1.100 db-01” | sudo tee -a /etc/hosts 

因此,tee在左边接收echo命令的输出,并使用sudo命令提升它,该命令最终将输出附加到文件中。

示例6 – 使用tee命令将一个命令的输出重定向到另一个命令

使用tee命令,我们可以很容易地将一个命令的输出重定向到另一个命令。这里第一个命令的输出将作为第二个命令的输入。示例如下:

  1. linuxmi@linuxmi:~/www.linuxmi.com$ grep ‘root’ /etc/passwd | tee /tmp/passwd.tmp | wc -l 

示例7 – 使用tee命令将更改保存到Vim编辑器中的文件

假设您以非root用户身份工作,正在对root拥有的文件进行更改,但忘记将sudo放在命令前面,现在您想保存更改,示例如下:

  1. linuxmi@linuxmi:~/www.linuxmi.com$ vim /etc/hosts 

保存对文件的更改时,您将收到只读消息,/etc/hosts” E212: 无法打开并写入文件

现在要在Vim编辑器中保存对/etc/hosts文件的更改,请运行

  1. :w !sudo tee % 

它将提示您输入用户的密码,如果用户拥有sudo权限,那么更改将被保存。

示例8 – 使用tee命令时忽略中断信号

在tee命令中使用“-i”选项可以忽略中断信号(CTRL-C),示例如下所示:

  1. linuxmi@linuxmi:~/www.linuxmi.com$ ping -c 5 linuxmi.com | tee -i /tmp/pingtest.tmp 

示例9 – shell脚本中的tee命令用法

在shell脚本中也经常使用Tee命令,下面列出了一个常见的示例:

  1. linuxmi@linuxmi:~/www.linuxmi.com$ vi basic-script.sh 
  1. #!/bin/bash 
  2. LOGFILE=/tmp/basic-logs-$(date +%d%m%Y) 
  3. FLAVOR=$(cat /etc/*-release  | grep -w 'NAME=' | cut -d"=" -f2 | awk '{print $1}'| sed 's/"//g') 
  4. if [ $FLAVOR == CentOS ]; 
  5. then 
  6.    dmesg | grep -i 'error' | tee -a $LOGFILE 
  7.    grep -i 'installed' /var/log/dnf.log | tee -a $LOGFILE 
  8. else 
  9.    echo 'do nothing' 
  10. fi 

正如我们在上面的Linux shell脚本中看到的,我们使用tee命令将两个命令的输出附加到日志文件中。

 

责任编辑:赵宁宁 来源: Linux迷
相关推荐

2022-05-08 09:39:20

LinuxTee 命令

2018-05-02 13:40:51

Linux命令touch

2020-05-20 13:45:52

Linuxtouch命令

2015-03-25 10:36:57

lsLinux

2022-08-29 08:33:22

SocatLinux命令

2020-04-16 14:20:16

Linuxtouch命令

2021-09-13 09:54:51

Linuxcrontab命令

2013-05-23 15:10:34

Netcat

2013-10-08 15:51:03

Linux find命

2022-01-17 10:05:33

LinuxWatch命令

2013-10-08 16:24:34

Linux find命

2018-03-12 15:26:00

Linux命令tee

2022-05-09 08:55:58

Linuxdiff命令

2017-03-06 16:45:36

Linux命令动画演示

2018-08-06 08:51:32

Linux命令cut

2021-12-06 10:15:37

Linuxcat命令

2021-09-14 10:55:16

LinuxDate命令

2021-07-11 12:06:07

Linux Date命令

2018-01-02 10:36:29

Linux命令Cheat

2019-11-21 00:00:15

Linuxless命令
点赞
收藏

51CTO技术栈公众号