tee命令

tee

  功能说明:读取标准输入的数据,并将其内容输出成文件。
  语   法:tee [-ai][--help][--version][文件…]
  补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。我们可利用tee把管道导入的数据存成文件,甚至一次保存数份文件。
  参   数:-a 附加到既有文件的后面,而非覆盖它。如果给予tee指令的文件名称已经存在,预设会覆盖该文件的内容。加上此参数后,数据会新增在该文件内容的最后面,而不会删除原先之内容。
       -i 忽略中断信号
       --help 在线帮助
       --version 显示版本信息

  范   例:

  列出文本文件slayers.story的内容,同时复制3份副本,文件名称分别为ss-copy1、ss-copy2、ss-copy3:
  $ cat slayers.story |tee ss-copy1 ss-copy2 ss-copy3

tee [-ai][--help][--version][文件...]

【功能】

tee以标准输入作为输入,标准输出和文件作为输出。

【举例】

tee file     //覆盖
tee -a file    //追加

tee -        //输出到标准输出两次
tee - -    //输出到标准输出三次

tee file1 file2 -    //输出到标准输出两次,并写到那两个文件中
ls | tee file  

另:把标准错误也被tee读取
ls "*" 2>&1 | tee ls.txt

*用tee生成一个文件,包含你敲入的内容:

 

复制代码

代码如下:


$tee testfile

 

这样,会提示要你用标准输入输入内容,然后敲回车会将你输入的内容写入testfile和输出到标准输出,如果用[Ctrl]d结束输入([Ctrl]c也行)。如果原来testfile有内容,将会覆盖。

*把内容追加到文件的末尾行:

 

复制代码

代码如下:


$tee -a testfile

 

结果类似上,不过如果原来testfile有内容则不会覆盖而是追加。


*生成一个文件,敲入的时候,不接受中断信号:

 

复制代码

代码如下:


$tee -i testfile

 

结果同testfile,不过不会接收中断信号,只能用[Ctrl]d结束,而不能用[Ctrl]c了。

*执行ls列出目录文件同时将输出保存到文件test中:

 

复制代码

代码如下:


$ls | tee test

 

这样,会像平时一样执行ls命令并将当前目录的文件名输出到标准输出。另外由于进行了tee命令,所以会生成一个test文件,这个test文件的内容和标准输出的内容一样。

【描述】

tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。可以用于既想看到标准输出,又想将标准输出保存到文件中的情况。

参数:

 -a或--append  附加到既有文件的后面,而非覆盖它.
 -i-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中。
 
使用示例补充:

示例一 tee命令与重定向的对比

[root@web ~]# seq 5 >1.txt 
[root@web ~]# cat 1.txt 
1
2
3
4
5
[root@web ~]# cat 1.txt >2.txt 
[root@web ~]# cat 1.txt | tee 3.txt 
1
2
3
4
5
[root@web ~]# cat 2.txt 
1
2
3
4
5
[root@web ~]# cat 3.txt 
1
2
3
4
5
[root@web ~]# cat 1.txt >>2.txt 
[root@web ~]# cat 1.txt | tee -a 3.txt 
1
2
3
4
5
[root@web ~]# cat 2.txt 
1
2
3
4
5
1
2
3
4
5
[root@web ~]# cat 3.txt 
1
2
3
4
5
1
2
3
4
5
[root@web ~]#

示例二 使用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
[root@web ~]#

[root@web ~]# echo -n 12345 | tee

12345[root@web ~]# echo -n 12345 | tee - 
1234512345[root@web ~]# echo -n 12345 | tee - - 
123451234512345[root@web ~]# echo -n 12345 | tee - - - 
12345123451234512345[root@web ~]# echo -n 12345 | tee - - - - 
1234512345123451234512345[root@web ~]#

示例三 使用tee命令把标准错误输出也保存到文件

[root@web ~]# ls "*" 
ls: *: 没有那个文件或目录
[root@web ~]# ls "*" | tee - 
ls: *: 没有那个文件或目录
[root@web ~]# ls "*" | tee ls.txt 
ls: *: 没有那个文件或目录
[root@web ~]# cat ls.txt 
[root@web ~]# ls "*" 2>&1 | tee ls.txt 
ls: *: 没有那个文件或目录
[root@web ~]# cat ls.txt 
ls: *: 没有那个文件或目录
[root@web ~]#

### Linux `tee` 命令的用法 `tee` 命令在 Linux 系统中用于将标准输入数据写入到文件的同时,也可以将其输出到标准输出设备(如屏幕)。这种特性使得 `tee` 命令非常适合用于管道操作中的日志记录或数据分流[^1]。 #### 基本语法 ```bash tee [选项]... [文件]... ``` - **选项**: - `-a, --append`:追加模式,将数据附加到目标文件末尾而不是覆盖文件。 - `-i, --ignore-interrupts`:忽略中断信号(如 `CTRL+C`),确保命令正常退出[^4]。 #### 示例 1. **同时将命令输出写入文件和屏幕** 下面的命令会将 `ls` 的输出同时显示在屏幕上,并保存到名为 `file` 的文件中。 ```bash ls | tee file ``` 如果需要追加到文件而不是覆盖,可以使用 `-a` 选项: ```bash ls | tee -a file ``` 2. **将输出写入多个文件** 使用 `tee` 命令可以轻松地将同一份数据写入多个文件。例如: ```bash echo "Hello World" | tee file1 file2 file3 ``` 上述命令会将字符串 `"Hello World"` 写入 `file1`、`file2` 和 `file3` 中,同时也会显示在屏幕上[^1]。 3. **结合进程替换功能** 在现代 Shell(如 `bash`、`zsh`)中,可以利用进程替换功能实现更复杂的操作。例如,将命令输出同时传递给两个不同的命令处理: ```bash echo "Sample Text" | tee >(grep "Sample") >(wc -c) ``` 这里的 `>(command)` 表示将数据传递给指定的命令进行处理。需要注意的是,此功能依赖于 Shell 的“进程替换”特性,因此不适用于 `/bin/sh` 等传统 Shell[^3]。 4. **忽略中断信号** 如果希望在执行过程中忽略中断信号(如 `CTRL+C`),可以使用 `-i` 选项。例如: ```bash yes | head -n 100 | tee -i output.txt ``` 即使按下 `CTRL+C`,`tee` 命令仍然会尝试完成其任务并正常退出[^4]。 #### 注意事项 - 默认情况下,`tee` 会覆盖目标文件的内容。如果需要保留原有内容,请使用 `-a` 选项。 - `tee` 命令本身不会对输入数据进行任何修改,仅负责将数据复制到指定文件和标准输出。 - 在脚本中使用 `tee` 时,请确保选择支持“进程替换”的 Shell(如 `bash` 或 `zsh`),否则某些高级用法可能无法正常工作[^3]。 ```bash #!/bin/bash echo "Logging data..." | tee log.txt ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天行健自强不息的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值