tail命令及多次grep過濾存在的問題

2021-08-24 17:30:10 字數 1463 閱讀 4387

使用tail命令檢視日誌,蒐集整理了一些常用的命令

1. tail命令格式

tail  [ 引數 ]  [ 選擇新增的引數 ] ... [ 檔案 ]

常用引數:

-f 迴圈讀取

-q 不顯示處理資訊

-v 顯示詳細的處理資訊

-c《數目》 顯示的位元組數

-n《行數》 顯示行數

--pid=pid 與-f合用,表示在程序id,pid死掉之後結束.

-q, --quiet, --silent 從不輸出給出檔名的首部

-s, --sleep-interval=s 與-f合用,表示在每次反覆的間隔休眠s秒

示例:

1. 檢視日誌檔案最後200行

tail -200 日誌檔案(列印出日誌檔案的最後200條資訊)

tail -f -n 200 日誌檔案  (實時列印最新的日誌資訊)

tail -200 n 日誌檔案(實時列印最新的日誌資訊)

tail -n +200 日誌檔案(從第200 行開始顯示日誌資訊)

2. 檢視日誌檔案的前200行

head -n 200 日誌檔案

3. 檢視日誌檔案的中間指定行

cat 日誌檔案 |  head -n 200 | tail -n + 101

4. grep過濾檔案內容並列印

grep 443檔案 (檢視檔案中中含有8080欄位的行)

grep -n 443檔案(確定8080欄位在檔案中的行數)

grep -n -i "nginx" 檔案 (確定ggpush在檔案中的行數並且忽略大小寫)

5. 過濾掉指定的日誌資訊

grep -v '關鍵字'

tail -f  檔名 | grep 關鍵字 | grep 關鍵字

7. tail -f 多次grep過濾輸出可能會出現的問題

對日誌記錄做多次grep過濾輸出,格式如下:

tail -f log | grep *** | grep yyy

發現grep失效,無法做正確輸出。google研究了一下,原因如下:

管道 | 是全緩衝的,一般來說buffer_size為4096,有些是8192。不管具體值多少,只有buffer_size滿了,才會看到輸出。

在操作裡  >>file 這個操作也是全緩衝的。調整如下

tail -f log | grep --line-buffer *** | grep --line-buffer yyy

結果輸出正常。

grep當帶上了 --line-buffer 的時候,每輸出一行,就重新整理一次。

在unix裡,塊裝置和普通檔案,以及管道都是全緩衝的。

對日誌分析告警和實時監控可以考慮如下形式:

tail -f $logf | while read var

docase "$var" in

......

esac

done

Linux命令(八)過濾文字 grep

grep是乙個強大的文字搜尋工具命令,用於查詢檔案中符合指定格式的字串,支援正規表示式。如不指定任何檔名稱,或是檔名為 則gerp命令從標準輸入裝置中讀取資料。grep家族包括grepegrep和fgrep。egrep 和 fgrep 命令只跟 grep 有很小的不同。egrep 是 grep 的擴...

grep命令檔案過濾分割與合併

grep global search regular expression re and print out the line,全面搜尋正規表示式並把行列印出來 是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹配的行列印出來。a不要忽略二進位制資料。a 顯示列數 除了顯示符合範本樣式的那...

grep命令常用引數及用法

grep命令是linux系統中一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹 配的行列印出來。grep全稱global regular expr ession print,表示全域性正規表示式版本,它的使用許可權是所有使用者。grep可用於shell指令碼,因為grep通過返回乙個狀態值...