Linux中查看日志文件的正確姿勢,求你別tail走天下瞭!

Linux中查看日志文件的正確姿勢,求你別tail走天下瞭!

作為一個後端開發工程師,在Linux中查看查看文件內容是基本操作瞭。尤其是通常要分析日志文件排查問題,那麼我們應該如何正確打開日志文件呢?對於我這種小菜雞來說,第一反應就是 cat,tail,vi(或vim)瞭,是的,我曾經用過好多次vim編輯器來查看日志文件(可恥)。

千萬不要使用vi命令來查看大文件內容, 尤其對於那些幾十G的大文件。因為vi僅僅是一個編輯器(可以理解為windows中的記事本),使用vi命令後則會把文件所有內容加載到內存中,如果內存不夠大的話,則可能會導致服務器癱瘓。

為瞭生成測試數據,筆者抓心撓肝,東拼西湊,寫瞭一個生成測試文件的shell腳本,方便下文的命令演示,復制到linux命令行執行即可。

#生成10行測試數據(可根據需求自行修改)
for((i=1;i<=10;i++));
do
echo"第$i行">>test.txt
if[[`expr$i%2`-eq0]]
then
echo-e>>test.txt
fi
done

直接查看文件內容

查看整個文件的內容的命令一共有三個,cat/tac/nl,nl命令筆者用的比較少,所以此處就不再演示瞭,感興趣的小夥伴可以去百度一哈。

cat [-AbEnTv]

選項與參數-A :相當於-vET的整合, 可以列出一些特殊字符而不是空白而已-b :列出行號,進針對非空白行做行號顯示,空白行不會標記-E :將結尾換行符$顯示出來-n :打印出行號,連同空白行也會有行號,與-b的選項不同-T : 將[tab]鍵以^I顯示出來-v : 列出一些看不出來的特殊字符

范例1:查看test.txt文件的內容

cat test.txt

范例2:查看test.txt文件的內容, 並展示行號

cat -n test.txt

范例3: 不推薦使用cat查看大文件

cat -n test.txt

Linux中查看日志文件的正確姿勢,求你別tail走天下瞭!

cat僅僅適合查看行數比較少的文件, 如果文件比較大則沒有什麼意義瞭,文件會快速翻到最後一行。如果文件中有特殊符號,比如[Tab], 換行等要顯示出來,就必須加上-A之類的選項。當然cat也可以通過管道符配合more或less使用也可以達到比較好的效果。

tac(和cat打印順序相反)

tac學過之後筆者從來沒有實際應用過,由於用的比較少,所以大傢知道就行瞭。不過這個命令比較有意思,和cat拼寫相反,所以他們的打印順序也相反,將最後一行作為第一行輸出。范例1:倒敘查看文件的內容

Linux中查看日志文件的正確姿勢,求你別tail走天下瞭!

翻頁查看

more

more命令瞭解一下就行瞭,功能太少,筆者一般都用less命令。

按鍵/命令空格鍵(Space):向下翻頁回車(Enter):向下翻行/字符串:在當前顯示的內容(翻頁進度位置),向下查找這個字符串關鍵字:f:立刻顯示文件名以及目前位置的行號q: :退出當前文件的瀏覽b或ctrl+b:往回翻頁范例1:翻行後,查看行號

Linux中查看日志文件的正確姿勢,求你別tail走天下瞭!

less

less命令比more更加有彈性,可以前後翻頁,不止可以向上查找,也可以向下查找。按鍵/命令[pagedown] :向下翻頁[pageup] :向上翻頁/字符串:在當前顯示的內容(翻頁進度位置),向下查找這個字符串關鍵字?字符串:向上查找字符串n :重復前一個查找,與/或?有關, 比如前一個命令是?表示向上查找,此時n會向上查找N: 反向的重復前一個查找g :跳轉到當前文件數據的第一行G :跳轉到當前文件數據的最後一行q :退出當前文件的瀏覽

范例演示

Linux中查看日志文件的正確姿勢,求你別tail走天下瞭!

數據截取

head

head命令用來提取文件的前n行,一般配合使用-n選項。當指定的行數為負數-x時,則會打印出除瞭後面x行的其他所有數據。范例1:查看前10行數據

head -n 10 test.txt
范例2(一共10000行,沒有空行):head -n -9989 test.txt

tail

從文件尾部截取數據。tail也是工作中最常用的命令,因為可以利用-f選項,一直刷新獲取文件尾部最新數據。

選項與參數-n : 查看後n行數據,註意當n後面值帶“+”號表示從第x行開始, 如 tail -n +1000 test.txt-f : 展示文件後面范例1:查看尾部5行數據【tail -n 5 test.txt】

范例2:查看文件尾部數據,並實時刷新數據

Linux中查看日志文件的正確姿勢,求你別tail走天下瞭!

范例3:查看文件尾部5行數據,並實時刷新數據

Linux中查看日志文件的正確姿勢,求你別tail走天下瞭!

通用命令

管道:Shell 還有一種功能,就是可以將兩個或者多個命令(程序或者進程)連接到一起,把一個命令的輸出作為下一個命令的輸入,以這種方式連接的兩個或者多個命令就形成瞭管道(pipe),管道命令用”|”來表示

范例:查看ll命令輸出的前10行

ll | head -n 3

grep :命令用於查找文件裡符合條件的字符串,這兩個命令也是linux中最常用的的,而在查看日志文件也通常會結合這兩個命令一起使用。

范例:查看文件文件中那些行包含‘999’

cat -n test.txt | grep ‘999’

>> : 文件追加重定向命令,可以往文件末尾追加數據,正如上文 echo “第$i行” >> test.txt。

范例:將一個文件的最後10行復制到helloworld.txt中

tail -n 10 >> helloworld.txt

wc文件字節數,字數,行數查看wc [-clw] [文件…],-c或–bytes或–chars 隻顯示Bytes數。-l或–lines 隻顯示行數。-w或–words 隻顯示字數。范例:查看文件行數wc -l

案例實戰

案例1:打印日志文件中第11到20行。思路:首先獲取前20行,然後在獲取20行的後10行即可,需要使用管道命令。head -n 20 text.txt | tail -n 10

cat -n test.txt | head -n 20 | tail -n 10(如果需要顯示行號)

Published in News by Awesome.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *