Linux檢視大檔案日誌

2021-09-27 12:36:39 字數 3849 閱讀 6066

linux 檢視大日誌檔案

1、使用 less 命令

less filename
但是使用上述命令的壞處是,預設開啟的位置在第一行,並且當切換到實時滾動模式(按 f ,實現效果類似 tail -f 效果 )或者想要滾動到最底部的時候(按 g ),會卡在計算行數一段時間。如果卡的時間比較長的話,可以直接按 ctrl + c ,取消計算行數。

我更推薦開啟檔案的時候使用-n :不計算行號(開啟大檔案的時候很有用)。

less  -n file 

less  +g -n   file  // 開啟檔案的時候,直接定位到檔案的最底部,預設情況下是在首行。

less +f -n    file  // 開啟檔案的時候,使用實時滾動模式,ctrl + c  退出實時滾動模式,按 f 切回實時滾動模式

less +1000g  -n  file  // 直接定位到第 1000 行,一般你提前通過 grep 命令,定位到行數後,再使用這個命令

less +50p   -n  file  // 直接定位到 50% 的位置

less +50p   -n  file  // 直接定位到第 100 位元組的位置。這個命令感覺不怎麼使用。

不使用 -n 的壞處是:當你使用 = 的時候,會計算出當前游標所在的位置,但是務必記得,大檔案計算行數會阻塞一段時間。例如執行下列命令:

less copy.log
less 命令開啟檔案後,按下 = ,因為檔案比較大,卡了我 20 幾秒。

顯示內容為: 檔名 copy.log , 當前螢幕顯示1-24行/該檔案一共有430000070行 , 從第一行到當前位置一共有 144 byte/該檔案一共有2580000418 byte , 當前位置在檔案的 0% 處。

如果使用 -n,輸入以下命令 :

less -n copy.log
然後按下 = ,執行就非常快了

因此我建議大家使用 less 命令顯示大檔案的的時候,加上 -n 。

當然如果檔案比較小,你想在使用 less 開啟檔案,並顯示檔案行數的話,可以使用 :

less -n file
如果你已經知道日誌輸出的關鍵字的話,使用 grep , 通常需要列印關鍵字前後的日誌。

grep 'key word' log.txt -a 20 // 列出包括匹配行之後 20 的行。

grep 'key word' log.txt -b 20 // 列出包括匹配行之前 20 的行。

grep 'key word' log.txt -c 20 // 列出包括匹配行前後各 20 行。

大檔案的話,grep 出來的資料比較多的話,你可以和 less 一起使用

grep  `world` copy.log | less
有時候需要將 tail 和 less 命令結合起來使用

tail -n +10000 | less // 從第 10000 開始,使用 less 檢視。

tail  -n 10000 | less // 檢視倒數第 1000 行到檔案最後的資料。

6.切割檔案

有時候想把乙個大檔案進行分割成多個小檔案.(我個人是不建議這麼做的,因為我發現 split 的時候,也是蠻耗時的,但是這裡仍然提供一種解決方法吧)

按檔案大小分割:

split -b 600m copy.log
分割後的檔案預設是以 x 開頭,例如我上述命令分割後檔案為:

$ ls -lht x*  // 這裡 * 是萬用字元,即列出以 x 開頭的檔案。
當然你可以按行數分割,具體的命令格式如下 :

split [選項]... [要切割的檔案] [輸出檔案字首]  // 輸出檔案字首為可選項
命令引數    說明

-a, --suffix-length=n    使用長度為 n 的字尾 (預設 2)

-b, --bytes=size    設定輸出檔案的大小。支援單位:m,k

-c, --line-bytes=size    設定輸出檔案的最大行數。與 -b 類似,但會盡量維持每行的完整性

-d, --numeric-suffixes    使用數字字尾代替字母

-l, --lines=number    裝置輸出檔案的行數

–help    顯示版本資訊

–version    輸出版本資訊

7.如果你已經知道需要的內容在第幾行,但是想要顯示指定行數之前或者之後的行。例如你想顯示 499999900 到 500000000 這100 行的內容。 推薦使用這個方法

head -500000000 file | tail  -100
其中 head -500000000 : 顯示檔案的前 500000000 行。

tail -100 :顯示最後 100行。

兩者結合起來就是在前 500000000 行中顯示後 100 行,即顯示 499999900 到 500000000 這100 行的內容。

或者使用 sed 命令:

sed -n '500000000q;499999900,500000000p'  file
其中 -n 與 p : 表示只列印符合條件的行。

500000000q; : 表示當執行到第 500000000 行的時候停止執行。 如果不使用 500000000q; sed 缺省會瀏覽整個檔案。

499999900,500000000 : 表示499999900 到 500000000 行。其中 , 逗號表示範圍。

整體結合起來就是列印 499999900 到 500000000 行,但是執行到第 500000000 行就不要再執行了。

或者使用 awk 命令

awk 'nr>=49999991 && nr<=50000000 nr==50000001' file
最後我發現三者的執行效率(copy.log 是乙個大小為 2.5 g 的測試檔案):

time (head -500000000  copy.log  | tail -100) > /dev/null

real    0m9.456s

user    0m8.854s

sys    0m3.501s

time (sed -n '500000000q;499999900,500000000p' copy.log) > /dev/null

real    0m25.968s

user    0m25.111s

sys    0m0.833s

time (awk 'nr>=499999900&& nr<=500000000 nr==500000001' copy.log) > /dev/null

real    1m4.743s

user    1m3.824s

sys    0m0.906s

總結

與其說是檢視大日誌檔案的方法,不如說是將 grep/awk/sed/head/less/tail 多個命令結合起來的方法。

其實最重要的不是怎麼看大檔案,還是在程式執行時候,就要對日誌檔案進行歸檔整理,例如,每天一次歸檔,或者每滿 500m 就歸檔。

當然大公司會用例如 elk 之類的日誌處理系統。

提示如果你在瀏覽這篇文章的時候,苦於沒有大的日誌檔案練習, 可以執行如下命令:

seq 1 1000000000 > file

linux 檢視大檔案 命令

常用命令 du h max depth 1 grep tg sort 查詢上g和t的目錄並排序 du sh 統計當前目錄的大小,以直觀方式展現 du h max depth 1 grep g sort 檢視上g目錄並排序 du sh max depth 1 檢視當前目錄下所有一級子目錄資料夾大小 d...

LINUX下檢視大檔案

du sh sort nrdu linux du命令也是檢視使用空間的,但是與df命令不同的是linux du命令是對檔案和目錄磁碟使用的空間的檢視,還是和df命令有一些區別的.1 命令格式 du 選項 檔案 2 命令功能 顯示每個檔案和目錄的磁碟使用空間。3 命令引數 a或 all 顯示目錄中個別...

linux 檢視日誌檔案

linux日誌檔案在 var log目錄下,可以通過命令檢視日誌檔案。1,cat messages可以檢視某個日誌檔案。2,要達到實時更新,可以通過tail命令檢視更新的資料,例如tail f messages。3,tail命令引數 f 迴圈讀取 q 不顯示處理資訊 v 顯示詳細的處理資訊 c 數目...