标题:[实践OK]Linux中查看日志文件的正确姿势,求你别tail走天下了! 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Fri, 20 Mar 2020 10:58:49 +0000 作者:jackxiang 地址:http://jackxiang.com/post/10470/ 内容: 摘录作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于笔者这种小菜鸡来说,第一反应就是 cat,tail,vi(或vim)了,是的,我曾经用过好多次vim编辑器来查看日志文件(可耻)。 千万不要使用vi命令来查看大文件内容, 尤其对于那些几十G的大文件。因为vi仅仅是一个编辑器(可以理解为windows中的记事本),使用vi命令后则会把文件所有内容加载到内存中,如果内存不够大的话,则可能会导致服务器瘫痪。 for ((i=1;i <= 10; i++)); do echo "第$i行" >> test.txt if [[ `expr $i % 2` -eq 0 ]] then echo -e >> test.txt fi done 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 Generated by Jackxiang's Bo-blog 2.1.1 Release