Linux下查看日誌用到的經常使用命令

殺殭屍進程 部分程序員,確定喜歡下面命令:

  ps -ef | grep java (先查java進程ID)java

  kill -9 java進程ID(生產環境謹慎使用)程序員

 

1.查看日誌經常使用命令
    tail:  
       -n  是顯示行號;至關於nl命令;例子以下:
             tail -100f test.log      實時監控100行日誌

            tail  -n  10  test.log   查詢日誌尾部最後10行的日誌;正則表達式

            tail -n +10 test.log    查詢10行以後的全部日誌;less

    head:  tcp

        跟tail是相反的,tail是看後多少行日誌;例子以下:工具

            head -n 10  test.log   查詢日誌文件中的頭10行日誌;ui

            head -n -10  test.log   查詢日誌文件除了最後10行的其餘全部日誌;spa

    cat: debug

        tac是倒序查看,是cat單詞反寫;例子以下:日誌

            cat -n test.log |grep "debug"   查詢關鍵字的日誌

 

2. 應用場景一:按行號查看---過濾出關鍵字附近的日誌

     1)cat -n test.log |grep "debug"  獲得關鍵日誌的行號

 

  2)一般查找出錯誤日誌 cat error.log | grep 'nick' , 這時候咱們還有個需求就是輸出當前這個日誌的先後幾行:

    cat error.log | grep -B 'nick' 顯示nick及前5行

    cat error.log | grep -A 'nick' 顯示nick及後5行

    cat error.log | grep -C 'nick' 顯示file文件裏匹配nick字串那行以及上下5行

    cat error.log | grep -n -B10 -A10 'nick' 顯示file文件裏匹配nick字串先後10行

  

3. 應用場景二:選取日誌中特定範圍進行分析

   1)cat -n test.log |tail -n +1000|head -n 20   從第1000行開始,顯示20行

            tail -n +1000表示查詢1000行以後的日誌

            head -n 20 則表示在前面的查詢結果裏再查前20條記錄

  2)cat catalina.out | head -n 1400| tail -n +1350  顯示1350行到1400行 (實現原理都差很少,就是經過語法糖)

 

 (1)按日期截取 :通常在日誌系統中都會記錄打印日誌的時間,一般咱們很是須要查找指定時間端的日誌:

        sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p'  test.log

        特別說明:該命令中的兩個日期值必須是日誌文件中包含的值,不然該命令無效.; 先 grep '2014-12-17 16:17:20' test.log 來肯定日誌中是否有該 時間點

 (2)按行數截取

    sed -n ‘10000,20000p’ test.log                

      sed -i '/關鍵詞/d' catalina.out  刪除包含關鍵詞的行

4.應用場景三:日誌內容特別多,打印在屏幕上不方便查看

    (1)使用moreless命令,

           如: cat -n test.log |grep "debug" |more     這樣就分頁打印了,經過點擊空格鍵翻頁

    (2)使用 >xxx.txt 將其保存到文件中,到時能夠拉下這個文件分析

            如:cat -n test.log |grep "debug"  >debug.txt

5:使用管道進行and or條件處理

  and 使用管道實現   例如:  grep -n '日誌排查' test.log | grep '日誌'

  or 用-E   例如:grep -n -E '日誌排查|hello' test.log  知足兩個關鍵字的均可以找出來

 

6:如何看查佔用cpu最多的進程?

方法一

核心指令ps

實際命令

  ps H -eo pid,pcpu | sort -nk2 | tail

執行效果以下:

[work@test01 ~]$ ps H -eo pid,pcpu | sort -nk2 | tail

31396  0.6

31396  0.6

31396  0.6

31396  0.6

31396  0.6

31396  0.6

31396  0.6

31396  0.6

30904  1.0

30914  1.0

結果

瞧見了吧,最耗cpu的pid=30914。

畫外音:其實是31396。

 

方法二

核心指令top

實際命令

top

Shift + t

 

7:找到了最耗CPU的進程ID,對應的服務名是什麼呢?

方法一

核心指令ps

實際命令

  ps aux | fgrep pid

執行效果以下:

[work@test01 ~]$ ps aux | fgrep 30914

work 30914  1.0  0.8 309568 71668 ?  Sl   Feb02 124:44 ./router2 –conf=rs.conf

結果

瞧見了吧,進程是./router2

畫外音:  grep 和fgrep的區別?

二者都是搜索工具,但功能上有區別。
  1,首先,grep支持的是標準正則表達式。
  2,fgrep,不支持正則表達式,只用於匹配固定字符串。

因此後者要比前者速度快,固然同時後者的搜索功能要弱於前者。

 

方法二

直接查proc便可。

實際命令

ll /proc/pid

執行效果以下:

[work@test01 ~]$ ll /proc/30914

lrwxrwxrwx  1 work work 0 Feb 10 13:27 cwd -> /home/work/im-env/router2

lrwxrwxrwx  1 work work 0 Feb 10 13:27 exe -> /home/work/im-env/router2/router2

畫外音:這個好,全路徑都出來了。

 

8:如何查看某個端口的鏈接狀況?

方法一

核心指令netstat

實際命令

  netstat -lap | fgrep port

執行效果以下:

[work@test01 ~]$ netstat -lap | fgrep 22022

tcp        0      0 10.58.xxx.29:22022          *:*                         LISTEN      31396/imui

tcp        0      0 10.58.xxx.29:22022          10.58.xxx.29:46642          ESTABLISHED 31396/imui

tcp        0      0 10.58.xxx.29:22022          10.58.xxx.29:46640          ESTABLISHED 31396/imui

 

方法二

核心指令lsof

實際命令

  lsof -i :port

執行效果以下:

[work@test01 ~]$ /usr/sbin/lsof -i :22022

COMMAND   PID USER   FD   TYPE   DEVICE SIZE NODE NAME

router  30904 work   50u  IPv4 69065770       TCP 10.58.xxx.29:46638->10.58.xxx.29:22022 (ESTABLISHED)

router  30904 work   51u  IPv4 69065772       TCP 10.58.xxx.29:46639->10.58.xxx.29:22022 (ESTABLISHED)

router  30904 work   52u  IPv4 69065774       TCP 10.58.xxx.29:46640->10.58.xxx.29:22022 (ESTABLISHED)

相關文章
相關標籤/搜索