linux查詢日誌命令總結

linux查詢日誌命令總結

【背景】
排查線上環境問題,少不了去線上查日誌。而使用什麼命令,能快速準確地查到我們需要查找地日誌信息,也是我們需要掌握的一項技能。

【命令】
Linux查看命令有多種:tail,head,cat,tac,more

(一) tail 命令

tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]

參數:
1)-f 循環讀取
2)-q 不顯示處理信息
3)-v 顯示詳細的處理信息
4)-c Number 從 Number 字節位置讀取指定文件
5)-n Number 從 Number 行位置讀取指定文件
6)-m Number 從 Number 多字節字符位置讀取指定文件,比方你的文件假設包括中文字,假設指定-c參數,可能導致截斷,但使用-m則會避免該問題
7)-b Number 從 Number 表示的512字節塊位置讀取指定文件。
8)-k Number 從 Number 表示的1KB塊位置讀取指定文件。

上述命令中,都涉及到number,假設不指定,默認顯示10行。Number前面可使用正負號,表示該偏移從頂部還是從尾部開始計算。

應用:
命令 含義tail -f test.log 查看實時日誌tail -100f test.log 查看最後100行日誌記錄tail -n 10 test.log 查詢日誌尾部最後10行的日誌tail -n +10 test.log 查詢10行之後的所有日誌tail -fn 100 test.log 循環實時查看最後100行記錄

(二) head 命令
功能跟tail是相反的,tail是查看後多少行日誌

命令 含義head -n 10 test.log 查詢日誌文件中的前10行日誌head -n -10 test.log 查詢日誌文件除了最後10行的其他所有日誌

(三) cat 命令
功能
1)一次顯示整個文件。 cat filename
2)創建一個文件。 cat > filename3)將幾個文件合併爲一個文件。 cat file1 file2 > file

參數:
1)-n 由1開始對所有輸出的行數編號
2)-b 和-n相似,只不過對於空白行不編號
3)-s 當遇到有連續兩行以上的空白行,就代換爲一行的空白行
4)-c 顯示的字節數
5)-n 顯示行數 行數> 數目>

應用
1)cat test.log | tail -n 1000 #輸出test.log 文件最後1000行

2)cat -n test.log |grep “debug” #得到關鍵日誌的行號

3)cat filename | tail -n +3000 | head -n 1000 #從第3000行開始,顯示1000行。即顯示3000~3999行

4)cat filename| head -n 3000 | tail -n +1000 #顯示1000行到3000行

5)cat -n textfile1 > textfile2 #把 textfile1 的檔案內容加上行號後輸入 textfile2 這個檔案裏

6)cat -b textfile1 textfile2 >> textfile3 #把 textfile1 和 textfile2 的檔案內容加上行號(空白行不加)之後將內容附加到 textfile3 裏

7)cat error.log | grep -C 5 ‘nick’ 顯示file文件裏匹配foo字串那行以及上下5行cat error.log | grep -B 5 ‘nick’ 顯示foo及前5行cat error.log | grep -A 5 ‘nick’ 顯示foo及後5行

(四) tac 命令
功能tac是將cat反寫過來,它的功能跟cat相反,cat是由第一行到最後一行連續顯示,而tac是由最後一行到第一行反向顯示。

(五) more 命令
功能類似cat,不過以一頁一頁形式顯示。基本指令按空白鍵(space)往下一頁顯示,按返回鍵(back)往上一頁顯示,還有字符搜索功能(與vi相似)

參數
1)-num 一次顯示的行數

2)-d 提示使用者,在畫面下方顯示 [Press space to continue, ‘q’ to quit.] ,如果使用者按錯鍵,則會顯示 [Press ‘h’ for instructions.] 而不是 ‘嗶’ 聲

3)-l 取消遇見特殊字元 ^L 時會暫停的功能

4)-f 計算行數時,以實際上的行數,而非自動換行過後的行數

5)-p 不以捲動的方式顯示每一頁,而是先清除螢幕後再顯示內容

6)-c 跟 -p 相似,不同的是先顯示內容再清除其他舊資料

7)-s 當遇到有連續兩行以上的空白行,就代換爲一行的空白行

8)-u 不顯示下引號 (根據環境變數 TERM 指定的 terminal 而有所不同)

9)+/pattern 在每個文檔顯示前搜尋該字串(pattern),然後從該字串之後開始顯示

10)+num 從第 num 行開始顯示

應用
如果我們查找的日誌很多,打印在屏幕上不方便查看, 使用more和less命令,如: cat -n test.log |grep “條件” |more 這樣就分頁打印了,通過點擊空格鍵翻頁

命令 含義more -s test.log 逐頁顯示日誌,如有連續兩行以上空白行則以一行空白行顯示more +20 test.log 從第 20 行開始顯示日誌內容

(六) grep 命令
功能:上面幾個命令都是用在查找文件方便,而在查找文件時,我們往往需要通過某些關鍵字查找,grep命令就可以幫助我們實現快速查找。

參數: [options]主要參數:
-c:只輸出匹配行的計數。
-I:不區分大 小寫(只適用於單字符)。
-h:查詢多文件時不顯示文件名。
-l:查詢多文件時只輸出包含匹配字符的文件名。
-n:顯示匹配行及 行號。
-s:不顯示不存在或無匹配文本的錯誤信息。
-v:顯示不包含匹配文本的所有行。
pattern正則表達式主要參數:
: 忽略正則表達式中特殊字符的原有含義。
^:匹配正則表達式的開始行。
$: 匹配正則表達式的結束行。
<:從匹配正則表達 式的行開始。

:到匹配正則表達式的行結束。

單個字符,如[A]即A符合要求 。
[ - ]:範圍,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的單個字符。
:有字符,長度可以爲0。
操作:
1、或操作grep -E ‘123|abc’ filename // 找出文件(filename)中包含123或者包含abc的行egrep ‘123|abc’ filename // 用egrep同樣可以實現awk ‘/123|abc/’ filename // awk 的實現方式

2、與操作grep pattern1 files | grep pattern2 :顯示既匹配 pattern1 又匹配 pattern2 的行。

3、其他操作grep -i pattern files :不區分大小寫地搜索。默認情況區分大小寫,grep -l pattern files :只列出匹配的文件名,grep -L pattern files :列出不匹配的文件名,grep -w pattern files :只匹配整個單詞,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),grep -C number pattern files :匹配的上下文分別顯示[number]行,

應用
1)more joint.log | grep ‘60007746’ #根據某退貨號查詢日誌

很多時候,我們都需要看到上下幾行的日誌,可以通過加相關參數實現。

2)more joint.log | grep -5 ‘60007746’ #打印匹配行的前後5行

3)more joint.log | grep -C 5 ‘60007746’ #打印匹配行的前後5行

4)more joint.log | grep -A 5 ‘60007746’ #打印匹配行的後5行

5)more joint.log | grep -B 5 ‘60007746’ #打印匹配行的前5行

6)cat -n umltech-scan |grep ‘reqBody’ #在日誌文件中查找某個字符串:cat -n 日誌文件 |grep ‘查找內容’,如果內容太多可以通過後面加more,通過空格查看下一頁

7)cat -n umltech-scan |grep ‘reqBody’>/test #將按條件查詢到的日誌內容保存到文件中:cat -n 日誌文件|grep ‘查找內容’ >保存位置

(七)sed
應用sed -n ‘5,10p’ filename 這樣你就可以只查看文件的第5行到第10行。

sed -n ‘/2018-02-06 15:05:38/,/2018-02-06 15:20:38/p’ umltech-scan按時間段查詢日誌:sed -n ‘/開始時間/,/結束時間/p’ umltech-scan,時間格式爲"yyyy-mm-dd hh:mm:ss"

(八)vi
應用查找文件內容關鍵字方法:先 執行命令>: vi filename然後輸入>: /查找字符串按n查找下一個,按N(大寫)查找上一個

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章