管道命令詳解:
注意:
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 中重要的符號,真的是很棒的發明~
更多管道符的用法讓我們一起去探索吧~