linux 命令之 tee

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhang_referee/article/details/83048374

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

我们 man tee 可以看到:

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

SYNOPSIS
       tee [OPTION]... [FILE]...

DESCRIPTION
       Copy standard input to each FILE, and also to standard output.

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

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 的习惯,只有这样,才会掌握第一手资料。

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

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  那样从文件读入内容到标准输出。

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

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 

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

 

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$ 
  -a, --append
              append to the given FILEs, do not overwrite

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

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 命令写入多个文件

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 权限保存修改。

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

esac

exit 0
username:zhang ,not root
# vim: noet ts=8

W12: 警告: 文件 "networking" 已变动,并且在 Vim 中的缓冲区也已变动
进一步说明请见 ":help W12"
确定([O]), 加载文件((L)): 

上述操作需要输入密码。

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

猜你喜欢

转载自blog.csdn.net/zhang_referee/article/details/83048374