linux 用管線可以讓指令互相搭配完成很多複雜的工作,只是我不太會用。最常用的是
$ cat /var/log/httpd/access_log |less $ rpm -qa|grep kernel
雖然可以直接 less 但是我還是比較習慣先 cat 出來,因為我覺得 cat 的工作是印字 less 是幫我可以翻頁。
$ less /var/log/httpd/access_log
如果有些指令是會不停的印出字來,像是 ping 一樣,這樣要怎麼用管線來跟他的每一次更新互動呢?其實原始的想法是我要怎麼取到每次 ping 的時間,他就一直更新阿~或者說要怎麼把他的結果轉存做處理,其實有很多程式是寫成這種樣子的~所以找到這個方法:
$ ping google.com | while read pong; do echo "$(date): $pong"; done
管線丟給一直跑迴圈的 read 他會幫忙一直讀出每次的內容,然後我們就可以在這裡動手腳了。另外一個例子,我自己亂寫的,只是 pidstat 跟 iostat 都有類似的特性可以以幾秒為單位輸出
$ iostat -hmc 1|while read pong;do echo $pong|tr -d "\n";done