linux 管道|,重定向>, >>, tee

Posted on 2020-03-17 15:23  橙子j  阅读(272)  评论(0)    收藏  举报

管道的使用 - |

管道是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)

管道命令使用|作为界定符号,管道命令与上面说的连续执行命令不一样。

  • 管道命令仅能处理standard output,对于standard error output会予以忽略。
    less,more,head,tail...都是可以接受standard input的命令,所以他们是管道命令
    ls,cp,mv并不会接受standard input的命令,所以他们就不是管道命令了。
  • 管道命令必须要能够接受来自前一个命令的数据成为standard input继续处理才行。

例子:列出当前路径下的文件和文件夹,给每一项加一个编号。

[root ~]# ls | cat -n

     1  dump.rdb

     2  mongodb-3.6.5

     3  Python-3.6.5

     4  redis-3.2.11

     5  redis.conf

例子:查找record.log中包含AAA,但不包含BBB的记录的总数

[root ~]# cat record.log | grep AAA | grep -v BBB | wc -l

wc 查看文件个数

参考https://www.jianshu.com/p/9c0c2b57cb73

 

输出重定向- > / >> /tee

>表示覆盖原文件内容(文件的日期也会自动更新)

[root ~]# cat readme.txt
banana
apple
grape
apple
grape
watermelon
pear
pitaya
[root ~]# cat readme.txt | sort | uniq > result.txt
[root ~]# cat result.txt
apple
banana
grape
pear
pitaya
watermelon

 

>>表示追加内容(会另起一行,文件的日期也会自动更新)

[root@slave1 ~]# ls -l hosts.log
-rw-r--r--. 1 root root 11 Dec 13 16:04 hosts.log # 查看hosts.log 的日期
[root@slave1 ~]# cat hosts.log                    # 查看hosts.log 文件的内容
 I am OK!
[root@slave1 ~]# echo "当前日期是 `date`" >> hosts.log  # 向hosts.log中追加 当前日期
[root@slave1 ~]# cat hosts.log                    # 再次查看hosts.log 文件的内容
 I am OK!
当前日期是 Thu Dec 13 16:05:18 CST 2018        
[root@slave1 ~]# ls -l hosts.log                  # 再次查看hosts.log 的日期
-rw-r--r--. 1 root root 56 Dec 13 16:05 hosts.log

参考:https://blog.csdn.net/wudinaniya/article/details/84846732

 

多重定向 – tee

读取标准输入的数据,并将其内容输出成文件

下面的命令除了在终端显示命令ls的结果之外,还会追加输出到ls.txt文件中。

[root ~]# ls | tee -a ls.txt

-a 追加,否则会覆盖文件原内容

参考:https://linux.cn/article-9435-1.html