linux玩转日志——你必须熟练掌握的几个命令

1,404 阅读4分钟

无脑方式——照着撸就对了,怎么撸都是对的

  1. cat命令

    • 格式: cat [参数]
    • 示例: cat -n xxx.log
    • 会列出整个xxx.log日志文件中所有日志【一旦日志文件很大,保证卡死你,即使你 ctrl + c强制停止,也要一会时间才能停下来】
  2. vim命令

    • 示例: vim xxx.log
    • 编辑器模式打开xxx.log日志文件【但是貌似只会展示一屏数据】,可进入那三种神奇的切换模式,对,就是那三个你永远记不住的切换模式!
    • 展开讲一下,在一般模式下如何使用光标移动、复制粘贴、搜索替换等
      • 上下左右光标可以进行纵向行、横向字符切换定位
      • G 移动到整个文档最后一行【常用】
      • gg 移动到整个文档的第一行【常用】
      • H 移动到当前 屏幕 的最上方一行第一个字符
      • nG n表示移动到当前整个文档的第n行
      • /word 向当前光标之下寻找一个名为word的字符串
      • ?word 向当前光标之上寻找一个名为word的字符串
      • :n1,n2s/word1/words/g 将文档的n1和n2行之间的word1全部替换为word2,如果后缀/g换为/gc,则会替换之前进行确认;特别的 :1,$s/word1/word2/g表示将整个文档的word1替换为word2
      • :set nu:set nonu 设置和隐藏行号
  3. tail命令

    • 同样用于查看文件内容
    • 格式: tail [参数] [文件]
    • tail xxx.log 静态显示文件最后10行
    • tail -f xxx.log 实时追踪文件增长情况【常用】
    • tail -n 100 xxx.log 静态显示文件最后100行
    • tail -n +100 xxx.log 静态显示从文件第100行到最后一行

show time

  1. 如果想要查找某个日志文件中所有的空指针异常,怎么做?

    • 配合grep命令,cat和tail都可以配合grep
    • 示例: cat xxx.log | grep NullPointerException 模糊匹配文件中含有NullPointerException的所有行记录【超级常用】
    • tail -f xxx.log | grep NullPointerException 追踪文件增长是出现NullPointerException的内容
    • 当前 grep也可以抛开cat和tail自己使用: grep xxx.log NullPointerException
    • 使用grep命令用于查找文件里符合条件的字符串
  2. 如果想要查找空指针在日志文件中对应的行号怎么做?

    • cat 命令后面带上 -n 参数——上面说过了
    • 示例: cat -n xxx.log | grep NullPointerException
    • 这种方式会输出所有匹配的日志信息
  3. 找到了报空指针的那一行对应的行号了,假设行号为1691,正常情况下,我们要通过这一行的前后10才能定位具体问题,也就是说我们要查找[1681~1701]行之间的日志,怎么做?

    • sed -n "1681,1701p" xxx.log 从1681行开始检索,到1701行结束
    • cat -n xxx.log | tail -n +1681 | head -n 20 从1681行开始往后检索20行结束
    • cat -n xxx.log | head -n +1701 | tail -n 20 从1701行开始往前检索20行结束
一波操作是不是有点懵,淡定,要想成为大神,那就继续往下看^~^

legendary

  1. 如果关键字不准确,匹配到的日志太多了,怎么办?

    • 可以使用more命令来浏览 或者 输出到文件中再分析
    • cat -n xxx.log | grep NullPointerException | more 将查询结果交由more输出,这样就能通过enter慢慢看了
    • cat xxx.log | grep NullPointerException > /home/xxx.txt 将查询结果写到/home/xxx.txt文件上,然后到xxx.txt中慢慢看呗
  2. 上面的情况要么是全量查找日志,要么就是通过关键字匹配查找,那如果不知道程序哪里报错,只知道出问题的时间呢?比如一些定时任务

    • 这个时候可以通过时间查找
    • 比如想要查询[2020-03-19 00:00:00~2020-03-20 00:10:59]这10 分钟内的日志,可以使用两种方式进行查找:
    • sed 命令和 grep命令
    • sed -n '/key1/,/key2/p' xxx.log 表示打印含有key1关键字的行 到包含key2关键字的行之间的行,所以首先要确定key1和key2在整个日志文件中存在
    • 我们使用grep进行试探性查找到分别与2020-03-19 00:00:00和2020-03-20 00:10:59最接近的一个日志打印时间
    • grep -n '2020-03-19 00:00:01' grep -n '2020-03-19 00:10:01' 找到两个与目标节点最接近的时间点
    • sed -n '/2020-03-19 00:00:01/,/2020-03-19 00:10:01/' xxx.log 即可查出对应时间段内的所有日志
总结:linux下查找日志,cat、tail、sed、grep等命令多用、熟能生巧