Linux tail 命令与日志查找应用场景技巧

前言

tail是Linux中的一个常用命令,用于查看文件尾部的内容,它与head命令相对应。我们常用它来查看日志文件,通过-f参数可实时看文件的最新内容。

tail命令格式与参数

格式

tail  [选项...] [文件...]
tail [-F | -f ] [-q] [-c # | -n #] [file ...]

:其中 # 代表数字的意思。

参数解释

参数 解释
-f --follow[={name|descriptor}], 跟踪文件的增长,并实时输出所增长的数据;缺省选项参数可以是’文件名’或’描述符’
-n --lines=K, 输出最后 K 行,也可以使用 -n +K指定从第K行开始输出
-c --bytes=K, 输出最后 K 个字节;也可以使用 -c +K 指定从第K字节开始输出
-q --quiet, 不输出所提供文件的标头

注: 指定 K 时(字节数或行数)如果以+开头,则表示从第 K 行或字节处开始打印;否则,打印文件中的最后 K 项。K 还可以计量单位和乘数后缀的形式指定,如:b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,GB 1000*1000*1000, G 1024*1024*1024,以及 T, P, E, Z, Y 等

tail 命令使用场景与日志查找技巧

场景1: 实时查看与关键字的相关的日志

通过-f参数,并配合grep命令,可以实现对文件内容的实时过滤。如:查看前几行、后几行、或前后几行,这时可以通过以下几个参数实现:

-A <显示行数>            除了显示符合匹配内容的那一行之外,并显示该行之后的内容
-B <显示行数>            在显示符合匹配内容的那一行之外,并显示该行之前的内容
-C <显示行数>或-<显示行数> 除了显示符合匹配内容的那一列之外,并显示该列之前后的内容

粟子:
监控info.log日志件,并查看含有迁移关键字的前后5行:

$ tail -f info.log|grep '迁移' -C 5
// 或
$ tail -f info.log|grep '迁移' -5

场景2:实时查看日志

通过-f参数,我们可以实时查看文件的新增内容:

$ tail -f info.log

注意:使用-f参数时不会中断文件监视,需要通过ctrl+c手动结束。

场景3:按位置查看文件内容

(1) 查看文件最后30行

$ tail -n -30 info.log
// 或
$ tail -n 30 info.log
// 或
$ tail -30 info.log

(2) 查看第30行至文件末尾:

$ tail -n +30 info.log
// 或
$ tail +30 info.log

(3) 查询日志文件除了最后30行的其他所有日志

head -n -30 info.log

(4) 配合head命令,实现查看文件的第10到20行:

$ head -20 info.log | tail -10

场景4:查找关键字附近的日志

  1. 首先,获取关键字的行号
#-n 显示行号
cat -n info.log |grep "关键字"

  1. 查找指定行号63829附近的日志
cat -n test.log |tail -n +63820|head -n 20
`tail -n +63820表示查询63820行之后的日志`
`head -n 20 则表示在前面的查询结果里再查前20条记录`

场景5:查找所有某种文件里符合条件的字符串

粟子: 在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行

grep test *file 

结果如下所示:

$ grep test test* #查找前缀有“test”的文件包含“test”字符串的文件  
testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行  
testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行  
testfile_2:Linux test #列出testfile_2 文件中包含test字符的行 

场景6:将查找的日志内容分页查看,或输出到一个文件中

(1) 分页查看
如果我们查找的日志很多,打印在屏幕上不方便查看, 使用moreless命令, 如: cat -n info.log |grep "迁移记录" |more 这样就分页打印了,通过点击空格键翻页
(2) 保存到文件中
使用 >xxx.txt将其保存到文件中,到时可以拉下这个文件分析.如:

cat -n info.log |grep "迁移记录" >xxx.txt

场景7:根据时间查找日志

可以先 grep '2020-06-17 16:17:20' info.log 来确定日志中是否有该时间点,以确保下面第4步可以拿到日志。这个根据时间段查询日志是非常有用的命令。

#查找2020-07-03 21:21 ~ 2020-07-03 21:22内的日志
sed -n '/2020-07-03 21:21/,/2020-07-03 21:22/p' info.log
#查找2020-07-03 21:21:34 ~ 2020-07-03 21:21:39内的所有日志
sed -n '/2020-07-03 21:21:34/,/2020-07-03 21:21:39/p' info.log

猜你喜欢

转载自blog.csdn.net/CPOHUI/article/details/107740294