Linux tail命令与实时日志、文件查看及过滤

 2019年01月16日    1527     声明


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

1. tail命令介绍

命令格式

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

将每个文件的最后10行打印到标准输出。

当指定多个时,则每个文件前面都有一个标题,表示文件名。

如果没有指定,或者指定的文件为是-,则读取标准输入。

参数

-c, --bytes=K           输出最后 K 个字节;也可以使用 -c +K 指定从第K字节开始输出
-f, --follow[={name|descriptor}]
                        跟踪文件的增长,并实时输出所增长的数据;
                        缺省选项参数可以是'文件名'或'描述符'
-F                      等价于 --follow=name --retry
-n, --lines=K           输出最后 K 行,而不是最后10行; 
                        也可以使用 -n +K指定从第K行开始输出
    --max-unchanged-stats=N 
                        使用 --follow=name,在N次跌代大小仍未改变时重新打开一个文件,查看它是否已取消链接或重命名(这是旋转日志文件的常见情况)
    ----pid=PID         结合 -f 使用,在进程ID、PID死掉后终止
-q, --quiet, --silent   不输出所提供文件的标头
      --retry           当文件不可访问时,重试打开文件
-s, --sleep-interval=N  结合 -f 使用,休眠大约 N 秒
                        迭代之间的间隔默认为 1.0;
                        结合 inotify 和 --pid=P,在每 N 秒后至少检查进行 P 一次
-v, --verbose           总是输出所提供文件的标头
    --help              显示帮助信息并退出
    --version           显示版本信息并退出

指定 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 等


2. tail命令的使用

查看文件内容

现有itbilu.log日志文件,查看其后5行:

$ tail -n -5 itbilu.log
// 或
$ tail -n 5 itbilu.log
// 或
$ tail -5 itbilu.log

查看第100行至文件末尾:

$ tail -n +100 itbilu.log
// 或
$ tail +100 itbilu.log

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

$ head -20 itbilu.log | tail -10


实时查看日志

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

$ tail -f itbilu.log

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


实时日志查看与grep过滤关键字

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

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

监控itbilu.log日志件,并查看含有'foo'关键字的前后5行:

$ tail -f itbilu.log|grep 'foo' -C 5
// 或
$ tail -f itbilu.log|grep 'foo' -5