linux pipe read

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *