高效编码查询日志的命令老是记不住?没关系,这篇文章帮你记

Posted 码农飞哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高效编码查询日志的命令老是记不住?没关系,这篇文章帮你记相关的知识,希望对你有一定的参考价值。

您好,我是码农飞哥,一直想飞暂时在跑个那个老哥。

擅长领域:Java高并发编程,mysql数据库
本文重点:记录日常工作中查看日志的各种命令。
干货满满,建议收藏,需要用到时常看看。小伙伴们有问题及需要,欢迎踊跃留言哦~ ~ ~。


现有两个日志文件,分别是normal.log文件和normal-05-29-2021-1.log.gz

找到日志文件

有时候我们只知道日志文件的名称,但是并不知道日志文件的地址。这种情况下,该如何查找日志文件呢?这里可以用的命令有两个:一个是path命令;一个是locate命令。这两个命令的区别是 path命令是搜索具体的目录;而locate命令式搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地信息。
就本例中搜索:normal.log 文件的位置:

使用path命令

path命令的使用的基本语法是:find < path > < expression > < cmd >
其中:path: 所要搜搜的目录及其所有子目录,默认为当前目录
expression: 所要搜索的文件的特征。
cmd: 对搜索结果进行特定的处理。

find / -name normal.log -type f

这个命令的意思是在根目录 / 下,查找名为 normal.log的文件,f 表示查找的是文件。查找结果是:
在这里插入图片描述

使用locate命令

locate命令的使用格式是locate [选项] [名称]

locate -r normal.log$

查找以normal.log结尾的所有文件。查找的结果如下:
在这里插入图片描述

基础的日志查看命令:

head命令

head 命令可用于查看文件开头部分的内容,又一个常用的参数 -n 用于显示行数,默认为10,显示10行的内容。

1. 命令格式:

head [参数] [文件]

2. 命令参数,各种操作的含义:

参数含义
-q隐藏文件名
-v显示文件名
-c<树木>显示字节数
-n<行数>显示行数

3.实例

  1. 显示normal.log 文件的头10行的命令是:
head normal.log
  1. 查询normal.log文件的头20行日志的命令是:
head -n 20  normal.log
  1. 查询normal.log日志文件除了最后20行的其他所有日志;
head -n -20  normal.log

tail 命令

tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

1.命令格式

tail [参数] [文件]  

2.命令参数

参数说明
-f循环读取
-q不显示处理信息
-v显示详细的处理信息
-c<数目>显示的字节数
-n<行数>显示文件的尾部n行内容

3.实例

  1. 要显示 normal.log 文件的最后 10 行的命令:
tail normal.log
  1. 查询日志尾部最后20行日志的命令
tail  -n  20  normal.log 
  1. 查询20行之后的所有日志的命令
tail -n +20 normal.log  

cat 命令

cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。

1.命令格式

cat [-AbeEnstTuv] [--help] [--version] fileName

2.命令参数

参数说明
-n由 1 开始对所有输出的行数编号。
-b和 -n 相似,只不过对于空白行不编号。
-s当遇到有连续两行以上的空白行,就代换为一行的空白行。
-v使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。

3.实例

  1. 把 normal.log 的文档内容加上行号后输入 test.txt 这个文档里:
cat -n normal.log > test.txt

grep命令

在介绍查询命令之前我们首先介绍一下grep命令,该命令是一个重要的命令,该命令用于查找含有关键词的数据,包括从文件中查找符合条件的字符串。

  1. 命令格式:grep [option] pattern [文件名]
  2. 命令参数,各种操作的含义:

命令参数

参数作用
-?同时显示匹配行上下的?行,如:grep -2 pattern filename 同时显示匹配行的上下2行
-b—byte-offset 打印匹配行前面打印该行所在的快号码
-c—count 只打印匹配的行数,不显示匹配的内容
-f—file=File 从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
-h—no-filename 当搜索多个文件时,不显示匹配文件名前缀
-i—ignore-case 忽略大小写差别
-q—quiet 取消显示,只返回退出状态,0则表示找到了匹配的行
-l—file-with-matches 打印匹配模板的文件清单
-n—line-number 在匹配的行前面打印行号
-s—silent 不显示关于不存在或者无法读取文件的错误信息
-v—revert-match 反检索,只显示不匹配的行
-w—word-regexp 如果被<和>引用,就把表达式做为一个单词搜索。
-V—version 显示软件版本信息

规则表达式:

规则表达含义
^锚定行的开始,如:‘^test’ 匹配所有以test开头的行
$锚定行的结束,如:‘test$’ 匹配所有以grep结尾的行
.匹配一个非换行符的字符,如:‘gr.p’ 匹配gr后接一个任意字符,然后是p。
*匹配零个或多个先前字符 如:'*test'匹配所有一个或多个空格后紧跟grep的行。

grep使用实例

实例1:查找进程

查找名字中包含dcs的所有进程
命令: ps -ef|grep dcs
输出:

[root@i- dcs-api]# ps -ef|grep dcs
root      1527     1  0 5月27 ?       00:14:22 java -jar ai-dcs.jar
root     17456 13312  0 10:58 pts/2    00:00:00 grep --color=auto dcs

第一条是查找出的进程;第二条结果是grep进程本身,并非真正要找的进程。

实例2: 查找指定进程的个数

命令:ps -ef|grep -c dsc
输出:

[root@i- dcs-api]# ps -ef|grep -c dcs
3

场景一:按照行号查看日志----过滤关键字附近的日志

前面介绍完了各种命令的使用,下面就让我们来实战一下吧。通常我们用grep拿到的日志很少,我们需要查看其附近的日志。

  1. 得到关键日志的行号:
 cat -n normal.log |grep '推送接口'

输出:

[root@i- dcs-]# cat -n normal.log |grep '推送接口'
   290	2021.06.02 at 06:00:00 698 CST INFO [http-nio-8087-exec-3]-[traceId:] ReportController pushReport() @59 - 推送接口接收到的参数是=[]

得到关键日志的行号是290行
2. 查询关键字前10行和后10行的日志:

cat -n normal.log |tail -n +289|head -n 20

其中,tail -n +289 表示查询289行之后的所有日志。head -n 20 则表示在前面的查询结果里再查前20条记录。

场景2: 如何按日期查询呢?

通常我们非常需要查找指定时间段的日志。

sed -n '/2021.06.02 at 06:00:00/,/2021.06.02 at 06:05:40/p' normal.log

需要特别说明的是:上面的两个日期必须是日志中打印出来的日志,否则无效。

  1. 关于日期的打印,可以先通过grep '2021.06.02 at 06:05:40' normal.log 来确保第4步可以拿到日志。这个根据时间段查询日志是非常有用的命令。
  2. 如果我们查找的日志很多,打印在屏幕上不方便查看,有两个办法:
    (1)使用more和less命令,如:cat -n normal.log |grep '推送接口'|more,这样就分页打印了,通过点击空格键翻页。
    (2) 使用>xxx.txt,将其保存到文件中,到时候可以拉下这个文件进行分析,如:cat -n normal.log |grep '推送接口' >test.txt

场景三:日志文件被压缩了如何查看呢?

在实际生产环境中,日志文件会被按时间或者按大小进行压缩。那么该如何查询被压缩的日志文件呢?如下有:normal-05-29-2021-1.log.gz 日志文件,我们可以通过
如下命令进行查看:

zcat -n normal-05-29-2021-1.log.gz |grep '推送'

输出结果是:

[root@i- dcs-api]# zcat -n normal-05-29-2021-1.log.gz |grep '推送'
2021.05.29 at 06:00:00 696 CST INFO [http-nio-8087-exec-1]-[traceId:] ReportController pushReport() @59 - 推送接口接收到的参数是=[]

场景四:显示日志文件的大小

一般情况下,我们都是直接通过ll命令来查询相关的日志
在这里插入图片描述

但是,这个命令有个不好的地方是显示的文件大小是按照字节数显示的,不太友好。通过命令:ll -h
在这里插入图片描述
为了帮助更多小白从零进阶 Java 工程师,从CSDN官方那边搞来了一套 《Java 工程师学习成长知识图谱》,尺寸 870mm x 560mm,展开后有一张办公桌大小,也可以折叠成一本书的尺寸,有兴趣的小伙伴可以了解一下,欢迎各个小伙伴们了解一下。
在这里插入图片描述

总结

本文相信介绍了日常工作中查询日志所使用到的各种命令,满足日常的工作需要已经绰绰有余。

以上是关于高效编码查询日志的命令老是记不住?没关系,这篇文章帮你记的主要内容,如果未能解决你的问题,请参考以下文章

关于【记住我的凭据】,老是记不住!!

JAVA里面的代码老是记不住怎么办

老是记不住的几个知识点

Java每天学习的知识太多,记不住怎么办?

记不住 Linux 命令?这三个工具可以帮你

mac 下curl的使用