Linux查看打日志文件


1.如果文件比較小的話,使用vim直接查看,如果文件比較大的話,使用vim會直接卡主

2.如果想要查看正在滾動的日志文件.這個命令可以查看大文件.

tail -f file 

Ctrl+c 終止tail命令

Ctrl+s 暫停tail命令

Ctrl+q繼續tail命令

3.如果文件比較大的話,也可以使用less命令

less file

但是使用上述命令的壞處是,默認打開的位置是第一行,並且當切換到實時滾動模式(按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

然后按下 = ,執行就非常快了

 

 

 

上述圖片中沒有 lines 數據,所以執行很快。
因此我建議大家使用 less 命令顯示大文件的的時候,加上 -n 。


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

less -N file

4.如果你已經知道日志輸出的關鍵字的話,使用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

5.有時候需要將 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 開頭的文件。
-rw-rw-r-- 1 apple apple  61M 6月  22 15:02 xae
-rw-rw-r-- 1 apple apple 600M 6月  22 15:02 xad
-rw-rw-r-- 1 apple apple 600M 6月  22 15:02 xac
-rw-rw-r-- 1 apple apple 600M 6月  22 15:02 xab
-rw-rw-r-- 1 apple apple 600M 6月  22 15:02 xaa

當然你可以按行數分割,具體的命令格式如下 :

命令參數 說明
-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{print} NR==50000001{exit}' 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{print} NR==500000001{exit}' 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM