前言
大家好,这里是浩道linux,主要给大家分享linux、python、网络通信相关的it知识平台。
今天浩道跟大家分享linux运维中的硬核干货,通过本文你将学到什么是管道符?使用管道符的便捷之处!以及为什么要少用管道符!!!
一、什么是管道符?
管道符号,是unix一个很强大的功能,符号为一条竖线:|。
用法: 命令 1 | 命令 2
功能是把第一个命令,即命令 1执行的结果作为命令 2的输入传给命令 2
例如命令:
cat test.txt | wc -l
命令功能拆解:
cat test.txt命令功能是打印test.txt文件内容(行数)。
wc -l命令完成行数统计。
整个命令功能就是将cat test.txt的执行结果,通过管道符|,传给后一个命令wc -l,作为wc -l命令的执行对象。
即上述两个命令结合管道符完成对test.txt文件的行数统计。
二、使用管道符的便捷之处
通过上述简单例子,我们应该可以看出使用管道符确实有它便捷的地方。以下罗列几个,让大家加深对于管道符使用的便捷之处。
例子1:通过shell分析,查看2023年4月1日14时这一个小时内有多少ip访问网站;
awk '{print $4,$1}' log_file | grep 01/apr/2023:14 | awk '{print $2}'| sort | uniq | wc -l
例子2:通过shell分析网站日志,查看有多少个ip访问?
awk '{print $1}' log_file|sort|uniq|wc -l
三、为什么要少用管道符?
这个才是我们本文讲解的重点,也是作为一个高级linux运维人员所要知道的,为什么要少用管道符?并不是说方便就可以大量使用,我们需要考虑到其执行的速度及效率,下面一起通过实例看看管道符要少用的原因!
实例:通过多种统计字符串长度命令的执行效率进行对比,得出管道符要少用的具体原因!
(一)统计字符串长度的命令有哪些?以下举例4个方法。
方法1:通过echo ${#str1} 命令进行统计,其中str1为自定义字符串变量。
方法2:通过expr length ${str1}命令进行统计,其中str1为自定义字符串变量。
方法3:通过echo命令,结合管道符,以及awk命令实现,如下命令:
echo ${str1} | awk '{print length($0)}'
其中str1为自定义字符串变量。
方法4:通过echo命令,结合管道符,以及wc命令实现,如下命令:
echo ${#str1} |wc -l
其中str1为自定义字符串变量。
(二)以上4种统计字符串长度的方法命令,哪一种效率最高,即速度最快?
以下先通过seq相关命令来生成相关的字符串长度。然后通过for循环执行来控制字符串生成次数的情况下,最后再通过time命令统计整个命令的执行时间,通过同等循环条件下,不同命令,结合直观的运行时间进行比较,得出效率最高的方法。
执行结果1:方法1中,通过echo ${#str1} 命令进行统计,具体命令如下:
time for i in {1..10000};do str1=`seq -s haodao 100`;echo ${#str1} &> /dev/null;done
命令执行结果,所耗时间如下:
[root@haodaolinux1 ~]# time for i in {1..10000};do str1=`seq -s haodao 100`;echo ${#str1} &> /dev/null;donereal 0m19.519suser 0m8.606ssys 0m11.374s
通过上述命令执行结果看出,该方法1耗时为19.519秒左右;
执行结果2:方法2中,通过expr length ${str1} 命令进行统计,具体命令如下:
time for i in {1..10000};do str1=`seq -s haodao 100`;expr length ${str1} &> /dev/null;done
命令执行结果,所耗时间如下:
[root@haodaolinux1 ~]# time for i in {1..10000};do str1=`seq -s haodao 100`;expr length ${str1} &> /dev/null;donereal 0m36.041suser 0m15.888ssys 0m21.697s
通过上述命令执行结果看出,该方法1耗时为36.041秒左右;
执行结果3:方法3中,通过echo命令,结合管道符,以及awk命令实现 进行统计,具体命令如下:
time for i in {1..10000};do str1=`seq -s haodao 100`;echo ${str1} | awk '{print length($0)}' &> /dev/null;done
命令执行结果,所耗时间如下:
time for i in {1..10000};do str1=`seq -s haodao 100`;echo ${str1} | awk '{print length($0)}' &> /dev/null;donereal 0m45.241suser 0m21.136ssys 0m35.092s
通过上述命令执行结果看出,该方法1耗时为45.241秒左右;
执行结果4:方法4中,通过echo命令,结合管道符,以及wc命令实现 进行统计,具体命令如下:
time for i in {1..10000};do str1=`seq -s haodao 100`;echo ${#str1} |wc -l &> /dev/null;done
命令执行结果,所耗时间如下:
[root@haodaolinux1 ~]# time for i in {1..10000};do str1=`seq -s haodao 100`;echo ${#str1} |wc -l &> /dev/null;donereal 0m43.024suser 0m20.671ssys 0m34.042s
通过上述命令执行结果看出,该方法1耗时为43.024秒左右;
结语:通过以上4种方法执行结果,我们很清楚得出方法1所耗时最少,效率最高。方法2次之;方法3和方法4中都结合了管道符的使用,耗时最多,效率最低。这里面有什么门道呢?我们都知道linux中的shell是由c语言开发的,因此它底层命令效率是最高的,而方法1中用的是linux内置命令,内置的操作;方法2中使用linux内置函数,效率高也就自然而然了。而方法3和方法4通过管道符,这涉及到类似二次加工,效率肯定也就低了。这下,我们知道了吧,管道符虽然在某些使用场景下很便捷,但是其也有其效率低的缺点,因此不能多用!
什么是数据科学 企业如何依赖数据科学
吉利的新能源车帝国版图 已经从自产电芯的举动上初见雏形了
C母座信号翻转正反插的Switch芯片VL170应用简述
骑行打电话哪款蓝牙耳机好,公路车骑行耳机推荐
电阻的封装类型介绍
linux中管道符的使用
区块链一大批疫情紧急应用落地
联想YOGA 27 2022:全面升级的超强配置
可穿戴设备未来将呈现以下三大趋势 预计到2023年市场出货量近2亿
大爆料! 小米MIX2S设计图 也将使用屏下指纹识别技术
回顾旭宇光电2020年的发展成果
特高频局部放电检测仪的设计方案
智慧大田种植管理系统,提升农业生产质量
4D成像雷达正进入规模量产落地期
面对经济下行压力,创维以质量和技术实现逆势上扬
爱国者移动固态硬盘S01和WDMyPassportSSD评测 到底怎么样
什么是水货(欧版原装)手机?
英飞凌第一季度分部利润率达9.4%
百万电动汽车计划:前景光明,道路曲折
稳压器的概念 稳压器的使用方法