管道的使用 - |
管道是一种通信机制,通常用于进程间的通信(也可通过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
浙公网安备 33010602011771号