概述
有时候,我们有这样的需求:在屏幕上输出信息的同时又想写入到文件中,以便后续查看。如果你想 "一步到胃",那么可以采用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)):
上述操作需要输入密码。
更多信息,请查看帮助文档。
最后
以上就是美满小虾米为你收集整理的linux 命令之 tee的全部内容,希望文章能够帮你解决linux 命令之 tee所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复