Linux查看日志方法

Linux查看日志方法

四种方法:tail、cat、grep、vim、less

第一种:tail查看实时变化的日志(吃内存)

功能:tail 命令用于显示文本文件的末尾几行

tail -f filename (查看文件,实时显示最后一页,默认查询最后10行,相当于tail -f -n 10 filename)  
tail -n 10 filename (显示filename最后10行数据)
tail -n +5 filename (从第5行开始显示文件)
tail -f -n 300 filename (显示最新的300条数据,并实时更新)
ctrl + c 退出tail查看模式

示例:

tail example.txt 显示文件 example.txt 的后十行内容;
tail -n 20 example.txt 显示文件 example.txt 的后二十行内容;
tail -f example.txt 显示文件 example.txt 的后十行内容并在文件内容增加后,自动显示新增的文件内容。
 
tail -n 50 -f example.txt 显示文件 example.txt 的后50行内容并在文件内容增加后,自动显示新增的文件内容。
 
注意:
最后一条命令非常有用,尤其在监控日志文件时,可以在屏幕上一直显示新增的日志信息

tail命令详解:

语法 :
  tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ] 
  
-b Number (从 Number 变量表示的 512 字节块位置开始读取指定文件。) 

-c Number (从 Number 变量表示的字节位置开始读取指定文件。)

-f 如果输入文件是常规文件或如果 File 参数指定 FIFO(先进先出),那么 tail 命令不会在复制了输入文件的最后的指定单元后终止,而是继续从输入文件读取和复制额外的单元(当这些单元可用时)。如果没有指定 File 参数,并且标准输入是管道,则会忽略 -f 标志。tail -f 命令可用于监视另一个进程正在写入的文件的增长。 

-k Number (从 Number 变量表示的 1KB 块位置开始读取指定文件。) 

-m Number (从 Number 变量表示的多字节字符位置开始读取指定文件。使用该标志提供在单字节和双字节字符代码集环境中的一致结果。 )

-n Number (从首行或末行位置来读取指定文件,位置由 Number 变量的符号(+ 或 - 或无)表示,并通过行号 Number 进行位移。 )

-r 从文件末尾以逆序方式显示输出。-r 标志的缺省值是以逆序方式显示整个文件。如果文件大于 20,480 字节,那么-r标志只显示最后的 20,480 字节。 -r 标志只有与 -n 标志一起时才有效。否则,就会将其忽略。

追踪特定内容日志

tail 命令可以实时查看文件内容的变化。但是当项目日志实时更新内容特别多时,需要查看的列往往时一闪而过,在快速更新的大量日志中查询关键列非常不方便,这是就需要tail命令与grep命令连用。追踪需要展示的特定信息,以查看固定线程http-nio-8091-exec-7为例:

tail -f log_file | grep ‘http-nio-8091-exec-7’

扩展内容

-C 选项来显示检索结果的前后几行,-A 选项展示检索结果后几行,-B选项展示检索结果前几行

tail -f log_file | grep -C 5 ‘http-nio-8091-exec-7’

第二种:cat关键字搜索

cat 区别于tail是对日志进行全文搜索,其中-n的作用是显示行号

cat -n filename |grep “http-nio-8091-exec-7”

扩展内容

-C 选项来显示检索结果的前后几行,-A 选项展示检索结果后几行,-B选项展示检索结果前几行

cat -n log_file | grep -C 5 ‘http-nio-8091-exec-7’

第三种:grep命令

grep是一个多用途的文本搜索工具,linux中使用非常频繁,并且使用很灵活,可以是变量,也可以是字符串。最基本的用法有以下两种:

  1. 搜索内容中无空格,可以直接执行grep命令,比如:grep pass a.txt,表示在a.txt文件中搜索pass所在的行。
  2. 如果搜索内容中有空格,则需要使用单引号或者双引号把搜素内容引起来,比如: grep “hello all” a.txt或者grep ‘hello all’ a.txt,如果不加单双引号,则提示搜搜错误,无法识别,因为不加引号,直接grep hello all a.txt,表示在all 和a.txt中搜索hello,这肯定是不对的

grep的一些参数命令:

1. grep -c 关键字 file:显示文件中包含搜索内容行数,比如前面的命令表示显示 file中包含 关键字  内容的行数是几。
2. grep -n 关键字 flie:列出所有的匹配行,并在最前面添加行的序列数。
3. grep -v 关键字 file:显示文件中不包含所搜索内容的行数,这个和-c的参数正好相反。
4. grep -i 关键字 file:列出所搜索内容的匹配行,搜索过程中不区分大小写。
5. grep -l 关键字 *:列出所有包含 关键字  内容的文件的名。
6. grep -r 关键字 :对当前目录和所有的子目录进行搜索。
7. grep -w 关键字 file:精确搜索,可以说准确性搜索,比如:grep -w b* a.txt:此命令执行时,*不会默认为任何字符,只表示字面意思,就是一个*字符.。
8. grep -x 关键字 file:完全匹配输出,比如:grep -x hello a.txt,只会输出某一行存在hello字符串,并且此行仅包含hello的内容。假设a.txt中有一行“hello all”,执行上述命令,此行不会被搜索到。

grep 匹配多个关键字 :

grep -E 匹配任意一个关键字

grep -E "keyword1|keyword2|keyword3" fileName.txt

	匹配 fileName.txt 中包含 keyword1、keyword2 或 keyword3 任意一个关键词的记录,只要满足其中任意条件就会被匹配。-E 或 --extended-regexp : 以extended语法的正则表达式查询关键词。-E是核心,千万不要省略。

同时匹配多个关键字:

使用管道符连接多个 grep ,实现多个关键字的与关系检索:

grep "keyword1" file.txt | grep "keyword2" |grep "keyword3"

必须同时满足三个条件(keyword1、keyword2和keyword3)才匹配。

第四种:编辑日志文件查找 vi(vim)

1、进入vim编辑模式:vim filename
2、输入“/关键字”,按enter键查找
3、查找下一个,按“n”即可
其他情况:
/关键字   注: 正向查找,按n; 反向查找,按N。
?关键字   注: 正向查找,按N; 反向查找,按n。

第五种:使用less查看日志

1. 直接查看日志

命令 : less filename
 
查看文件后,若文件过大,可通过以下命令滚动文件:
    j    下一行
    k    上一行
    f    向下滚动一屏幕
    b    向上滚动一屏幕
    g    定位到文档头部
    G    定位到文档最尾部
    q    退出less模式
 
查找关键字内容时,常用向下查找、向上查看。如在日志中查找,因日志一般是追加的,从下向上查找更为常用。
 
   /keyword  向下查找
     n    向下匹配下一处匹配文本
     N    向上匹配下一处匹配文本
 
  ?keyword  向上查找
     n    向上匹配下一处匹配文本
     N    向下匹配下一处匹配文本
     

2. 带出行号查看文件

日志文件一般有上万行,带行号显示会方便很多。

less -N filename

3. 实时查看文档变动(实时滚动文档)

进入less模式后,键入F,即实时滚动文档

F        实时滚动文档
Ctrl + c   退出实时滚动模式
 
类似效果:
tail -f filename