我是靠谱客的博主 美满小虾米,这篇文章主要介绍linux 命令之 tee,现在分享给大家,希望可以做个参考。

有时候,我们有这样的需求:在屏幕上输出信息的同时又想写入到文件中,以便后续查看。如果你想 "一步到胃",那么可以采用tee 命令。

我们 man tee 可以看到:

 tee - read from standard input and write to standard output and files (从标准输入读并写入到标准输出和文件[自己翻译的有点生硬] )。

复制代码
1
2
3
4
5
6
SYNOPSIS tee [OPTION]... [FILE]... DESCRIPTION Copy standard input to each FILE, and also to standard output.

可以看到描述部分说,复制标准输入到文件,也可以到标准输出。看到这部分有没有想到什么?反正我想到了,cat 命令。这句话的意思是说,它和 cat  的一些功能是类似的,好了废话不多说,先体验一把。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
zhang@zhang:~/Code/Shell$ cat w3 w3 xiaomu xiziz xiaomu xiziz woshi xiaomu xizi woshi xiaomu xizi ^C zhang@zhang:~/Code/Shell$ tee zhang zhang xiaomu xizi xiaomu xizi w3 w3 ^C zhang@zhang:~/Code/Shell$

 

在这里,建议在 linux 养成 man 的习惯,只有这样,才会掌握第一手资料。

从标准读入并写到标准输出和文件:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
zhang@zhang:~/Code/Shell$ tee self_report.txt my blog name is called xiaomu xizi my blog name is called xiaomu xizi my blog address is :blog.csdn.net/zhang_referee my blog address is :blog.csdn.net/zhang_referee I love coding ,love writing I love coding ,love writing ok ok done done zhang@zhang:~/Code/Shell$ cat self_resport.txt cat: self_resport.txt: 没有那个文件或目录 zhang@zhang:~/Code/Shell$ cat self_report.txt my blog name is called xiaomu xizi my blog address is :blog.csdn.net/zhang_referee I love coding ,love writing ok done zhang@zhang:~/Code/Shell$

 

注意:man 文档中并没有说,可串联文件和标准输出(这是man cat 翻译来的,原文:cat - concatenate files and print on the standard output ) ,所以不可像 cat  那样从文件读入内容到标准输出。

如果,你跟我一样做了如下操作,那么数据会丢失

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
zhang@zhang:~/Code/Shell$ cat self_report.txt my blog name is called xiaomu xizi my blog address is :blog.csdn.net/zhang_referee I love coding ,love writing ok done zhang@zhang:~/Code/Shell$ echo "tee 命令示例:请勿随意做以下操作,数据会丢失" tee 命令示例:请勿随意做以下操作,数据会丢失 zhang@zhang:~/Code/Shell$ echo "tee 命令示例:请勿随意做以下操作,数据会丢失" tee 命令示例:请勿随意做以下操作,数据会丢失 zhang@zhang:~/Code/Shell$ tee self_report.txt ^C zhang@zhang:~/Code/Shell$ cat self_report.txt

下面来看下,解决我们的需求问题 -- 输出和写入到文件一步到位

 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
zhang@zhang:~/Code/Shell$ ls -l | tee out.txt 总用量 44 -rw-rw-r-- 1 zhang zhang 32 10月 7 15:05 1.sh -rw-rw-r-- 1 zhang zhang 76 10月 10 00:08 2.sh -rw-rw-r-- 1 zhang zhang 344 10月 10 00:52 distinguish.sh -rwxrw-r-- 1 zhang zhang 131 10月 9 00:33 exec_method.sh -rw-rw-r-- 1 zhang zhang 52 10月 10 00:21 export.sh prw-rw-r-- 1 zhang zhang 0 10月 7 17:40 fifo -rw-rw-r-- 1 zhang zhang 187 10月 8 20:59 foreach.sh -rw-rw-r-- 1 zhang zhang 199 10月 14 00:19 func.sh -rw-rw-r-- 1 zhang zhang 225 10月 8 20:49 if_1.sh -rw-rw-r-- 1 zhang zhang 280 10月 9 04:20 if.sh -rw-rw-r-- 1 zhang zhang 0 10月 14 17:12 out.txt -rw-rw-r-- 1 zhang zhang 0 10月 14 17:10 self_report.txt -rw-rw-r-- 1 zhang zhang 161 10月 10 00:12 shift.sh -rw-rw-r-- 1 zhang zhang 268 10月 8 21:26 while.sh zhang@zhang:~/Code/Shell$ cat out.txt 总用量 44 -rw-rw-r-- 1 zhang zhang 32 10月 7 15:05 1.sh -rw-rw-r-- 1 zhang zhang 76 10月 10 00:08 2.sh -rw-rw-r-- 1 zhang zhang 344 10月 10 00:52 distinguish.sh -rwxrw-r-- 1 zhang zhang 131 10月 9 00:33 exec_method.sh -rw-rw-r-- 1 zhang zhang 52 10月 10 00:21 export.sh prw-rw-r-- 1 zhang zhang 0 10月 7 17:40 fifo -rw-rw-r-- 1 zhang zhang 187 10月 8 20:59 foreach.sh -rw-rw-r-- 1 zhang zhang 199 10月 14 00:19 func.sh -rw-rw-r-- 1 zhang zhang 225 10月 8 20:49 if_1.sh -rw-rw-r-- 1 zhang zhang 280 10月 9 04:20 if.sh -rw-rw-r-- 1 zhang zhang 0 10月 14 17:12 out.txt -rw-rw-r-- 1 zhang zhang 0 10月 14 17:10 self_report.txt -rw-rw-r-- 1 zhang zhang 161 10月 10 00:12 shift.sh -rw-rw-r-- 1 zhang zhang 268 10月 8 21:26 while.sh zhang@zhang:~/Code/Shell$
复制代码
1
2
3
-a, --append append to the given FILEs, do not overwrite

对同一文件执行tee 命令 ,默认情况下,会覆盖,使用 -a 参数,可追加

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
zhang@zhang:~/Code/Shell$ ls -l | grep out.txt | tee -a out.txt -rw-rw-r-- 1 zhang zhang 759 10月 14 17:14 out.txt zhang@zhang:~/Code/Shell$ cat out.txt 总用量 44 -rw-rw-r-- 1 zhang zhang 32 10月 7 15:05 1.sh -rw-rw-r-- 1 zhang zhang 76 10月 10 00:08 2.sh -rw-rw-r-- 1 zhang zhang 344 10月 10 00:52 distinguish.sh -rwxrw-r-- 1 zhang zhang 131 10月 9 00:33 exec_method.sh -rw-rw-r-- 1 zhang zhang 52 10月 10 00:21 export.sh prw-rw-r-- 1 zhang zhang 0 10月 7 17:40 fifo -rw-rw-r-- 1 zhang zhang 187 10月 8 20:59 foreach.sh -rw-rw-r-- 1 zhang zhang 199 10月 14 00:19 func.sh -rw-rw-r-- 1 zhang zhang 225 10月 8 20:49 if_1.sh -rw-rw-r-- 1 zhang zhang 280 10月 9 04:20 if.sh -rw-rw-r-- 1 zhang zhang 0 10月 14 17:14 out.txt -rw-rw-r-- 1 zhang zhang 0 10月 14 17:10 self_report.txt -rw-rw-r-- 1 zhang zhang 161 10月 10 00:12 shift.sh -rw-rw-r-- 1 zhang zhang 268 10月 8 21:26 while.sh -rw-rw-r-- 1 zhang zhang 759 10月 14 17:14 out.txt zhang@zhang:~/Code/Shell$

使用tee 命令写入多个文件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
zhang@zhang:~$ ps -aux | grep gnome-system-monitor zhang 14650 3.3 0.7 653532 60940 pts/11 Sl+ 17:27 0:00 gnome-system-monitor zhang 14671 0.0 0.0 21312 940 pts/14 S+ 17:28 0:00 grep --color=auto gnome-system-monitor zhang@zhang:~$ ps -aux | grep gnome-system-monitor | tee monitor.txt ubuntu_monitor.txt gnome_monitor.txt zhang 14650 3.8 0.7 653532 60940 pts/11 Sl+ 17:27 0:02 gnome-system-monitor zhang 14675 0.0 0.0 21312 968 pts/14 S+ 17:28 0:00 grep --color=auto gnome-system-monitor zhang@zhang:~$ ls Code Data examples.desktop gnome_monitor.txt monitor.txt ubuntu_monitor.txt 公共的 模板 视频 图片 文档 下载 音乐 桌面 zhang@zhang:~$ cat monitor.txt zhang 14650 3.8 0.7 653532 60940 pts/11 Sl+ 17:27 0:02 gnome-system-monitor zhang 14675 0.0 0.0 21312 968 pts/14 S+ 17:28 0:00 grep --color=auto gnome-system-monitor zhang@zhang:~$ cat gnome_monitor.txt zhang 14650 3.8 0.7 653532 60940 pts/11 Sl+ 17:27 0:02 gnome-system-monitor zhang 14675 0.0 0.0 21312 968 pts/14 S+ 17:28 0:00 grep --color=auto gnome-system-monitor zhang@zhang:~$ cat ubuntu_monitor.txt zhang 14650 3.8 0.7 653532 60940 pts/11 Sl+ 17:27 0:02 gnome-system-monitor zhang 14675 0.0 0.0 21312 968 pts/14 S+ 17:28 0:00 grep --color=auto gnome-system-monitor zhang@zhang:~$

 

如何使用 tee 命令提升文件写入权限?

     假如你使用 Vim 编辑器 打开文件,并且做了很多更改,然后当你尝试保存修改时,你得到一个报错,让你意识到那是一个 root 所拥有的文件,这意味着你需要使用 sudo 权限保存修改。

注意:请备份相关文件,不要该出问题了。

 

复制代码
1
2
3
4
5
6
7
8
9
10
esac exit 0 username:zhang ,not root # vim: noet ts=8 W12: 警告: 文件 "networking" 已变动,并且在 Vim 中的缓冲区也已变动 进一步说明请见 ":help W12" 确定([O]), 加载文件((L)):

上述操作需要输入密码。

 

更多信息,请查看帮助文档。

最后

以上就是美满小虾米最近收集整理的关于linux 命令之 tee的全部内容,更多相关linux内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部