日志打印

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

【命令】
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 > filename
3)將幾個文件合并為一個文件。 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(大寫)查找上一個

【總結】
熟悉常用的Linux命令也是我們必須要掌握的一項技能,這樣在查找問題過程中也能更加高效速度。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容