管道命令详解:

注意:
1、管道命令会自动忽略错误的标准输入
2、管道命令后面接的命令必须能够接收标准输入,不能接收的命令包括ls、cp、mv等
管道应用示例:
管道需要搭配其他命令来使用,下面来几个例子。
1、查看tomcat进程详情(常用,管道入门级)
ps -ef | grep tomcat
ps命令用于报告当前系统进程状态,-e参数表示显示所有用户所有进程,-f参数表示全格式显示,ps -ef的输出如下图:
这一条条的结果,通过管道,输入给后面的命令。
grep全称是Globally search a Regular Expression and Print,能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。所以用管道连接后,这个命令就表示显示所有进程,并且格式化输出,然后用“tomcat”字符串来过滤每一行,得到最终的输出结果。
2、查看物理cpu个数(进阶级,多管道连用)
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
拆解:
cat /proc/cpuinfo:查看cpu详细信息
grep "physical id":用“physical id”过滤每一行
sort:将输入结果按照ASCII值进行排序
uniq:去重
wc -l:计算行数
我们从sort开始看:
你要问我问啥输出这么多重复的,你自己敲一下cat /proc/cpuinfo就明白了。
3、用管道计算1+2+3+……+100(奇技淫巧版)
看到这道题,你会想怎么去做?写个循环i++ j++?还是用公式(1+100)*n/2?
我们的bash可以非常巧妙的解决这个问题。
首先我们要知道linux 中有个计算器,叫bc,我们先来看看他的用法。
直接输入bc进入程序
扔给bc一条算式
看到第二种用法,我们或许就意识到了,bc可以直接计算输入给他的字符串!
是不是很有趣?
那我们能不能拿到一个1+2+3+..+99+100的字符串呢?
我们知道echo {1..100}可以生成1 2 3 4 5 … 100的字符串,中间以空格隔开。
等等..用空格隔开?把空格换成加号不就行了么?我们来:
Echo {1..100} |tr ' ' '+'
看我们拿到了什么?
再来Echo {1..100} |tr ' ' '+'|bc
看看~是不是很厉害呢?
管道符是linux 中重要的符号,真的是很棒的发明~
更多管道符的用法让我们一起去探索吧~