[实践OK]Linux中查看日志文件的正确姿势,求你别tail走天下了!

jackxiang 2020-3-20 10:58 | |
摘录作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于笔者这种小菜鸡来说,第一反应就是 cat,tail,vi(或vim)了,是的,我曾经用过好多次vim编辑器来查看日志文件(可耻)。

千万不要使用vi命令来查看大文件内容, 尤其对于那些几十G的大文件。因为vi仅仅是一个编辑器(可以理解为windows中的记事本),使用vi命令后则会把文件所有内容加载到内存中,如果内存不够大的话,则可能会导致服务器瘫痪。


cat test.txt
第1行
第2行

第3行
第4行

第5行
第6行

第7行
第8行

第9行
第10行

不按脚本,直接每一行都有行号:
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行
第21行

less

less命令比more更加有弹性,可以前后翻页,不止可以向上查找,也可以向下查找。
按键/命令
[pagedown] :向下翻页
[pageup] :向上翻页
/字符串:在当前显示的内容(翻页进度位置),向下查找这个字符串关键字
?字符串:向上查找字符串
n :重复前一个查找,与/或?有关, 比如前一个命令是?表示向上查找,此时n会向上查找
N:  反向的重复前一个查找
g :跳转到当前文件数据的第一行
G :跳转到当前文件数据的最后一行
q :退出当前文件的浏览

范例演示

数据截取
head

head命令用来提取文件的前n行,一般配合使用-n选项。当指定的行数为负数-x时,则会打印出除了后面x行的其他所有数据。
范例1:查看前10行数据
head -n 10 test.txt
head -n 10 test.txt
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行

范例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:查看文件尾部数据,并实时刷新数据

tail -f test.txt

范例3:查看文件尾部5行数据,并实时刷新数据
tail -n 5 -f  test.txt


通用命令
管道:Shell 还有一种功能,就是可以将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe),管道命令用"|"来表示。

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

ll | head -n 3

ll | head -n 10
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   #head和tail都是-n ,head -n 是头n行,tail -n是从第n+1行到行尾
cat -n test.txt | head -n 20 | tail -n 10(如果需要显示行号)

分解:
head -n 20 text.txt
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行

第二步,将上在输出通过管道从11行到最后:
head -n 20 test.txt |tail -n 10
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行



来自:https://mp.weixin.qq.com/s/Q-NfY2sr4n2XiJwy8SsXDA

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/10470/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2020-3-20 11:05
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]