• 當前位置:首頁 > IT技術 > 系統服務 > 正文

    Linux下查看日志用到的常用命令
    2022-02-14 14:03:26

    作為一名后端程序員,和Linux打交道的地方很多,不會看Linux日志,非常容易受到來自同事和面試官的嘲諷,所以掌握一種或者幾種查看日志的方法非常重要。

    Linux查看日志的命令有多種: tail、cat、tac、head、echo等,本文只介紹幾種常用的方法。

    grep命令

    Linux 文本操作的三大神器:grep、sed、awk。

    各自的最佳應用場景:

    • grep:使用正則表達式搜索文本,并把匹配的行打印出來,是強大的文本搜索工具;
    • sed:用于編輯匹配到的文本,是一種流編輯器;
    • awk:能夠對文本進行復雜的格式處理,是一種處理文本的語言。

    我們首先要學習grep命令。

    命令功能

    grep全稱是Global Regular Expression Print,表示全局正則表達式版本,它的使用權限是所有用戶。主要功能是在文件中查找/過濾所需要的內容。

    比如查看 ip 地址的命令:

    ifconfig | grep inet

    命令格式

    格式:grep [option] pattern file

    其中,option 是 grep 命令的參數,pattern 是所需查找/過濾的內容,file 是指定的文件。

    命令參數

    • -A<顯示行數>:除了顯示匹配 pattern 的那一行外,顯示該行之后的內容
    • -B<顯示行數>:除了顯示匹配 pattern 的那一行外,顯示該行之前的內容
    • -C<顯示行數>:除了顯示匹配 pattern 的那一行外,顯示該行前、后的內容
    • -c:統計匹配的行數
    • -e:同時匹配多個pattern
    • -i:忽略字符的大小寫
    • -n:顯示匹配的行號
    • -o:只顯示匹配的字符串
    • -v:顯示沒有匹配pattern的那一行,相當于反向匹配
    • -w:匹配整個單詞

    grep應用示例

    比如有一個hello.txt,內容如下:

    aaa
    bbb
    ccc
    aaaAAA
    bbbBBB
    cccCCC
    helloworld
    hello world

    通過設定不同命令參數的示例如下:

    同時匹配多個pattern(-e)和忽略大小寫(-i)很方便查找:

    顯示行號(-n)可以快速定位:

    反向匹配(-v)也經常用到:

    常用的正則表達式

    常用的正則表達式:

    • .:任意單個字符
    • *:任意字符多次
    • []:指定范圍,如[0-9]、[a-z]、[A-Z]、[0-9a-zA-Z]
    • ^:行首
    • $:行尾
    • ^$:空行

    比如有一個hello.txt,內容如下:

    使用正則表達式的匹配示例:

    常用語法總結

    過濾以“abc”開頭的行:grep "^abc"
    過濾不包含"abc"的行:grep -v "abc"
    過濾包含"abc"的行并查看最后兩行:grep "adb" | tail -n 2
    過濾包含"abc"的行并查看最前面一行:grep -m 1  "adb"
    過濾包含"abc"的行并查看第一項(和上面的區別是,如果如果第一行有多個匹配項,上面會顯示整行,這里只會顯示第一行的第一項):grep -m 1  "adb"  |  head 1
    過濾包含"abc"的行并顯示前面兩行和后面三行:grep -B2 -A3 "adb"
    過濾包含"abc"的行并顯示前面兩行和后面兩行:grep -C2 "adb"

    tail命令

    命令格式:

    tail [參數] [文件]  

    參數:

    • -f 循環讀取
    • -q 不顯示處理信息
    • -v 顯示詳細的處理信息
    • -c<數目> 顯示的字節數
    • -n<行數> 顯示行數
    • -q, --quiet, --silent 從不輸出給出文件名的首部
    • -s, --sleep-interval=S 與-f合用,表示在每次反復的間隔休眠S秒

    用法如下:

    tail -n 10 test.log 查詢日志尾部最后10行的日志;
    tail -n +10 test.log 查詢10行之后的所有日志;
    tail -fn 1000 test.log 循環實時查看最后1000行記錄(最常用的)

    一般還會配合著grep用,例如:

    tail -fn 1000 test.log | grep '關鍵字'

    如果一次性查詢的數據量太大,可以進行翻頁查看,例如:

    tail -n 4700 aa.log |more -1000 可以進行多屏顯示(ctrl + f 或者 空格鍵可以快捷鍵)

    head命令

    跟tail是相反的head是看前多少行日志。

    head -n 10 test.log 查詢日志文件中的頭10行日志;
    head -n -10 test.log 查詢日志文件除了最后10行的其他所有日志;

    head其他參數參考tail。

    cat命令

    cat 是由第一行到最后一行連續顯示在屏幕上。

    一次顯示整個文件:

    cat -n filename

    從鍵盤創建一個文件:

    cat > filename

    將幾個文件合并為一個文件:

    cat file1 file2 > file 只能創建新文件,不能編輯已有文件

    將一個日志文件的內容追加到另外一個:

    cat -n textfile1 > textfile2

    清空一個日志文件:

    cat : >textfile2

    注意:> 意思是創建,>>是追加。千萬不要弄混了。

    cat也可以跟tail一樣使用grep進行關鍵字的過濾。

    如果需要實現多個關鍵字同時包含,可以進行“與”操作,例如:

    cat test.log| grep "abc" | grep "123"

    如果需要打印出文件test.log中匹配包含“abc"或者包含"123"的行,可以用如下方式:

    cat test.log | grep "abc|123"

    more命令

    more命令是一個基于vi編輯器文本過濾器,它以全屏幕的方式按頁顯示文本文件的內容,支持vi中的關鍵字定位操作。more名單中內置了若干快捷鍵,常用的有H(獲得幫助信息),Enter(向下翻滾一行),空格(向下滾動一屏),Q(退出命令)。more命令從前向后讀取文件,因此在啟動時就加載整個文件。

    該命令一次顯示一屏文本,滿屏后停下來,并且在屏幕的底部出現一個提示信息,給出至今己顯示的該文件的百分比:–More–(XX%)

    • more的語法:more 文件名
    • Enter 向下n行,需要定義,默認為1行
    • Ctrl f 向下滾動一屏
    • 空格鍵 向下滾動一屏
    • Ctrl b 返回上一屏
    • = 輸出當前行的行號
    • :f 輸出文件名和當前行的行號
    • v 調用vi編輯器
    • !命令 調用Shell,并執行命令
    • q退出more

    sed命令

    這個命令可以查找日志文件特定的一段 , 根據時間的一個范圍查詢,可以按照行號和時間范圍查詢。

    按照行號:

    sed -n '5,10p' filename 這樣你就可以只查看文件的第5行到第10行。

    按照時間段:

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

    less命令

    less命令在查詢日志時,一般流程是這樣的:

    less log.log
    shift + G 命令到文件尾部 然后輸入 ?加上你要搜索的關鍵字例如 ?1213
    按 n 向上查找關鍵字
    shift+n 反向查找關鍵字
    less與more類似,使用less可以隨意瀏覽文件,而more僅能向前移動,不能向后移動,而且 less 在查看之前不會加載整個文件。
    less log2013.log 查看文件
    ps -ef | less ps查看進程信息并通過less分頁顯示
    history | less 查看命令歷史使用記錄并通過less分頁顯示
    less log2013.log log2014.log 瀏覽多個文件

    常用的命令參數:

    less與more類似,使用less可以隨意瀏覽文件,而more僅能向前移動,不能向后移動,而且 less 在查看之前不會加載整個文件。
    less log2013.log 查看文件
    ps -ef | less ps查看進程信息并通過less分頁顯示
    history | less 查看命令歷史使用記錄并通過less分頁顯示
    less log2013.log log2014.log 瀏覽多個文件
    常用命令參數:
    -b <緩沖區大小> 設置緩沖區的大小
    -g 只標志最后搜索的關鍵詞
    -i 忽略搜索時的大小寫
    -m 顯示類似more命令的百分比
    -N 顯示每行的行號
    -o <文件名> 將less 輸出的內容在指定文件中保存起來
    -Q 不使用警告音
    -s 顯示連續空行為一行
    /字符串:向下搜索"字符串"的功能
    ?字符串:向上搜索"字符串"的功能
    n:重復前一個搜索(與 / 或 ? 有關)
    N:反向重復前一個搜索(與 / 或 ? 有關)
    b 向后翻一頁
    h 顯示幫助界面
    q 退出less 命令

    一般本人查日志配合應用的其他命令:

    history // 所有的歷史記錄

    history | grep XXX // 歷史記錄中包含某些指令的記錄

    history | more // 分頁查看記錄

    history -c // 清空所有的歷史記錄

    !! 重復執行上一個命令

    查詢出來記錄后選中 : !323

    Linux日志文件說明:
    /var/log/message 系統啟動后的信息和錯誤日志,是Red Hat Linux中最常用的日志之一
    /var/log/secure 與安全相關的日志信息
    /var/log/maillog 與郵件相關的日志信息
    /var/log/cron 與定時任務相關的日志信息
    /var/log/spooler 與UUCP和news設備相關的日志信息
    /var/log/boot.log 守護進程啟動和停止相關的日志消息
    /var/log/wtmp 該日志文件永久記錄每個用戶登錄、注銷及系統的啟動、停機的事件

    指定日志時間段

    測試過程中,經常會出現一閃而過的錯誤信息提示,沒來得及截圖, 要想復現,有些許困難。留給開發去定位問題的,只能是提供當時錯誤信息提示的大概時間, 如2020-07-20 13:00 -13:10 這個時間段,去后臺找日志。
    以下是2種查看指定時間段日志的命令,比較常用。
    日志文件如下-僅供測試:
    要求:查詢2020-07-21 11:58:00~ 12:05:50 這個時間段的日志?
    方法一:使用grep命令
    grep  -E '2020-07-21 1[1-2]:[5-0][8-5]:[0-5]0' out.log
    執行結果:Invalid range end
    ?
    正則表達式匹配的數字 為:[0-9] 等價于 [[:digit:]] 因此以上命令不可用。
    換種思路:11:58:00 ~ 12:05:50 這個時間段 拆分為 11:58:00~11:59:59 和12:00:00~12.05:50,命令如下:
    grep  -E '2020-07-21 11:5[8-9]:[0-5][0-9]|2020-07-21 12:0[0-5]:[0-5]0' out.log
    grep -E 選項可以用來擴展選項為正則表達式。如果使用了grep 命令的選項-E,則應該使用 | 來分割多個pattern,以此實現OR操作。
    方法二:使用sed 命令
    sed -n '/2020-07-21 11:58:00/,/2020-07-21 12:05:50/p' out.log

    sed 選項說明:

    • -n選項:只顯示匹配處理的行(不加會輸出所有)
    • -p選項:打印

    -n 和-p??經常一起使用。

    在日志文件中查找關鍵字前后多少行

    方式一

    ?(1)cat -n pom.xml | grep abc

    ?上面的命令是打開pom.xml文件,并顯示行號,查找關鍵字abc,這個-n就是顯示pom.xml這個文件的行號。

    ?(2)cat -n pom.xml | tail -n +13 | head -n 6

    tail -n +13意思是從文件的第13行往后顯示,head -n 6 的意思是顯示13行后的6行

    總結:先求得關鍵字的行號,比如求得關鍵字的行號是100行。

    方式二

    • cat filename |grep 關鍵字 -C10? 上面顯示關鍵字的前后10行? ? ? ? ? -C顯示前后多少行
    • cat filename |grep 關鍵字 -A10? 上面顯示關鍵字的后10行? ? ? ? ? ? ? -A顯示后多少行
    • cat filename |grep 關鍵字 -B10? 上面顯示關鍵字的前10行? ? ? ? ? ? ? -B顯示前多少行

    ?

    本文摘自 :https://www.cnblogs.com/

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码