tail
是Linux中的一个常用命令,用于查看文件尾部的内容,它与head
命令相对应。我们常用它来查看日志文件,通过-f
参数可实时看文件的最新内容。
格式
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 等
通过-f
参数,并配合grep命令,可以实现对文件内容的实时过滤。如:查看前几行、后几行、或前后几行,这时可以通过以下几个参数实现:
-A <显示行数> 除了显示符合匹配内容的那一行之外,并显示该行之后的内容
-B <显示行数> 在显示符合匹配内容的那一行之外,并显示该行之前的内容
-C <显示行数>或-<显示行数> 除了显示符合匹配内容的那一列之外,并显示该列之前后的内容
粟子:
监控info.log日志件,并查看含有迁移关键字的前后5行:
$ tail -f info.log|grep '迁移' -C 5
// 或
$ tail -f info.log|grep '迁移' -5
通过-f
参数,我们可以实时查看文件的新增内容:
$ tail -f info.log
注意:使用-f
参数时不会中断文件监视,需要通过ctrl+c
手动结束。
(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
#-n 显示行号
cat -n info.log |grep "关键字"
cat -n test.log |tail -n +63820|head -n 20
`tail -n +63820表示查询63820行之后的日志`
`head -n 20 则表示在前面的查询结果里再查前20条记录`
粟子: 在当前目录中,查找后缀有 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字符的行
(1) 分页查看
如果我们查找的日志很多,打印在屏幕上不方便查看, 使用more
和less
命令, 如: cat -n info.log |grep "迁移记录" |more
这样就分页打印了,通过点击空格键翻页
(2) 保存到文件中
使用 >xxx.txt
将其保存到文件中,到时可以拉下这个文件分析.如:
cat -n info.log |grep "迁移记录" >xxx.txt
可以先 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