加入收藏 | 设为首页 | 会员中心 | 我要投稿 百客网 - 百科网 (https://www.baikewang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

应知应会:在linux/unix上分析程序日志的技巧

发布时间:2022-10-17 12:39:21 所属栏目:Unix 来源:
导读:  more :

  作用:该指令,可以将文件的内容,从前向后,每次一屏,打印到终端屏幕上。

  用法:

  more filename

  显示一屏信息后,' 空格' 向下翻一屏,' 回车' 向下
  more :
 
  作用:该指令,可以将文件的内容,从前向后,每次一屏,打印到终端屏幕上。
 
  用法:
 
  more filename
 
  显示一屏信息后,' 空格' 向下翻一屏,' 回车' 向下翻一行,' q ' 退出
 
  cat :
 
  作用:该指令本来的作用,是将多个文件的内容合并起来,打印到标准输出,
 
  但最常见的用法是显示一个文件的内容,但文件比较大的情况, 屏幕会很快滚动,无法查看有效信息,建议使用 more 。
 
  用法:
 
  cat filename
 
  grep :
 
  作用:打印文件或者标准输入中符合特定模式的行,该指令是从日志文件中检索特定信息的最有效手段。
 
  1、 基本用法
 
  grep pattern filename
 
  如:
 
  grep "error" catalina.out
 
  可以将 tomcat 日志 catalina.out 中所有包含 error 的行显示出来
 
  2、 使用正则表达式
 
  grep -e "pattern" filename
 
  如:
 
  grep -e "[eE]rror" catalina.out
 
  可以将 tomcat 日志 catalina.out 中所有包含 error 或者 Error 的行显示出来
 
  3、 常用选项
 
  -i 匹配时忽略大小写
 
  -n 在打印的行前显示该行在原文件中的行号
 
  -v 该选项,将 grep 的默认行为翻转,打印那些不包含特定模式的行
 
  wc :
 
  作用:统计文件中的行数、字数和字节数
 
  用法:
 
  wc filename
 
  如:
 
  [service@localhost threshold]$ wc nohup.out
 
  9761028 76738200 1672741676 nohup.out
 
  从前到后的三个数分别是行数、字数、字节数。
 
  该指令比较常用的参数是 -l ,这个参数可以只统计行数
 
  [service@localhost threshold]$ wc -l nohup.out
 
  9761028 nohup.out
 
  head:
 
  作用:显示文件的开头 N 行
 
  用法:
 
  head -num filename
 
  如:
 
  head -100 catalina.out
 
  显示 catalina.out 的前 100 行
 
  tail :
 
  作用:显示文件的最后 N 行,或者实时显示文件中新增的内容。
 
  用法:
 
  1、 显示文件最后 N 行
 
  tail -num filename
 
  如:
 
  tail -100 catalina.out
 
  则显示 catalina.out 文件的最后 100 行
 
  2、 实时显示文件中新增内容
 
  tail -f filename
 
  如:
 
  tail -f catalina.out
 
  执行该指令,不会直接返回命令行,而是实时打印日志文件中新增加的内容UNIX 系统日志,这一特性,对于查看日志是非常有效的。
 
  如果想终止输出,按 Ctrl+C 即可。
 
  Linux/unix 的管道:
 
  管道,顾名思义,你可以把它理解为一个管子,这个管子连接的是前一个指令的输出和后一个指令的输入。
 
  管道在命令行上用一个竖线 '|' 表示。
 
  比如 :
 
  echo 'hello world'
 
  在屏幕上打印一行字,而
 
  echo 'hello world' | wc –l
 
  就是把 echo 的输出送给 wc 指令, wc 指令统计行数,输出结果为:
 
  1
 
  组合使用:
 
  通过分析日志来查找问题,其本质是在日志中寻找特定的模式,并定位该模式的出现的上下文(一般要求前后 N 行)。在实际应用场景中,我们更多的是组合使用前面介绍的指令,来快速定位对我们有用的日志信息。
 
  以下场景,我们假定日志文件名为 catalina.out
 
  场景一 : 实时跟踪日志文件 , 并过滤出包含特定关键字的日志
 
  tail -f catalina.out | grep " 关键字 "
 
  以 上指令组合 , 将 catalina.out 中新增的日志实时取出 , 通过管道送给 grep 指令 , grep 指令将其中包含 " 关键字 " 的行显示在 console 上 , 直到用户按 ctrl+c 退出。管道可以多次连接,所以你可以在后面增加更多的 grep 来得到更加精确的过滤结果。
 
  比如:
 
  tail -f catalina.out | grep " 关键字 " | grep -v "debug"
 
  以上指令组合,将显示所有包含" 关键字" 且不包含" debug " 的行。
 
  场景二 :寻找日志中某个异常的 stacktrace 和前后相关信息
 
  第一步:定位出现异常的行, java 的异常,通常包含 Exception 字样
 
  grep -n "Exception" catalina.out
 
  该指令的 -n 参数会打印符合条件的行的行号,示例输出如下:
 
  [itims@localhost logs]$ grep -n "Exception" catalina.out
 
  33642:java.lang.NullPointerException
 
  33910:java.lang.NullPointerException
 
  34213:java.lang.NullPointerException
 
  34523:java.lang.NullPointerException
 
  34597:java.lang.NullPointerException
 
  第二步 : 截取 Exception 所在行的前后各 10 行。
 
  比如我们想关注 33910 行的 NullPointerException , 可以用如下指令 :
 
  head -33920 catalina.out | tail -20
 
  该指令会得到如下输出 :
 
  [itims@localhost logs]$ head -33920 catalina.out | tail -20
 
  Asia/Shanghai
 
  CN
 
  /usr/local/jdk1.5.0_12/jre
 
  Thu Sep 17 11:13:00 GMT+08:00 2009
 
  17 Sep 2009 03:13:00 GMT
 

(编辑:百客网 - 百科网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章