Linux线上日志排查

2,489

开发过程中,经常需要查找线上日志的错误,比如查看log4j日志。但是由于日志本身比较大,所以需要用linux过滤日志,定位报错误位置。常用的查看文本命令有less、cat、more、tail、grep、head等

more

more基于vi编辑器,在启动时就加载整个文件 然后一页一页分屏显示,方便操作者主页读取。more支持vi中的关键字操作。

参数

  • -num 以此显示行数
  • +num 从第num行还是显示
  • +/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示

动作

  • 按Space键:显示文本的下一屏内容
  • 按Enter键:只显示文本的下n行内容,n默认为1
  • 按H键:显示帮助屏,展示相关帮助信息
  • 按B键:显示上n行内容,n默认值为1
  • 按Q键:退出命令
  • 按=键:输出当前行的行号
  • 按:f:输出文件名和当前行的行号

命令实例

实例1:显示文件中从第三行起的内容
more +3 linux.log

实例2:从文件中查找第一个出现“day3”字符串的行,并从该出前两行开始显示输出
more +/day3 linux.log

$ more +/day3 linux.log
...跳过
2018-04-day1
2018-04-day2
2018-04-day3

实例3:列出文件过多时限制每次出现的个数 ll |more -5

#ls -l | more -3
总用量 32
lrwxrwxrwx. 1 root root 7 9月 20 09:47 bin -> usr/bin
dr-xr-xr-x. 4 root root 4096 9月 20 10:04 boot

这时,如果想下页在现实5条,则可以直接输入5然后按空格键,就会在输出5行。

less

less命令的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。less在查看之前不会加载整个文件,适合查看比较大的文件,总的来说less是比较强大的。

动作

  • 回车键 向下移动一行
  • y 向上移动一行
  • 空格键 向下滚动一屏
  • b 向上滚动一屏
  • d 向下滚动半屏
  • h less 的帮助
  • u 向上洋动半屏
  • w 可以指定显示哪行开始显示,是从指定数字的下一行显示;比如指定的是 6,那就从第 7 行显示
  • g 跳到第一行
  • G 跳到最后一行
  • p n% 跳到 n%,比如 10%,也就是说比整个文件内容的 10% 处开始显示
  • /pattern 搜索 pattern ,比如 /MAIL 表示在文件中搜索 MAIL 单词
  • v 调用 vi 编辑器
  • q 退出 less
  • !command 调用 SHELL,可以运行命令,比如! ls 显示当前列当前目录下的所有文件

常用参数

  • -c 从顶部(从上到下)刷新屏幕,并显示文件内容。而不是通过底部滚动完成刷新
  • -f 强制打开文件,二进制文件显示时,不提示警告
  • -i 搜索时忽略大小写;除非搜索串中包含大写字母
  • -I 搜索时忽略大小写,除非搜索串中包含小写字母
  • -m 显示读取文件的百分比
  • -M 显法读取文件的百分比、行号及总行数
  • -N 在每行前输出行号
  • -p pattern 搜索 pattern;比如在 /etc/profile 搜索单词 MAIL,就用 less -p MAIL /etc/profile
  • -s 把连续多个空白行作为一个空白行显示
  • -Q 在终端静音,去掉提示音
  • +num 从指定行开始显示

常见用法

less -m -i -N linux.log

查看的时候屏幕显示行号、百分比并且搜索的时候不区分大小写

history | less +10

从第十行开始显示历史记录

cat

cat是一个查看和连接文本的工具,通常和more搭配。但是两者不同的是,cat可以连接合并两个文件。查看而言,cat适用于较小的文本。因此不太适合查看线上的log。常见参数有:

  • -n或-number:有1开始对所有输出的行数编号
  • -b或--number-nonblank:和-n相似,只不过对于空白行不编号
  • -s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行
  • -A:显示不可打印字符,行尾显示“$”
  • -e:等价于"-vE"选项
  • -t:等价于"-vT"选项

命令实例

cat m1

在屏幕上显示文件m1的内容

cat m1 m2

m1文件下面跟着显示m2的内容

cat m1 m2 > file

将文件m1和m2合并后放入文件file中

head

head命令用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。

常用参数

  • -n<数字>:指定显示头部内容的行数
  • -c<字符数>:指定显示头部内容的字符数
  • -v:总是显示文件名的头信息
  • -q:不显示文件名的头信息

常见用法

head -n 行数值 文件名;

比如我们显示 linux.log前4行内容,可以:

head -n 4

grep

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

常见用法

grep -E 'at |Execption | exception | Caused by' log.log

使用正则表达式,在日志中查找抛异常的行信息

grep match_pattern log.log

在日志中搜索一个单词,命令行返回一个包含该单词的文本行

grep "match_pattern" file_1 file_2 file_3 ...

在多个文件中查找

grep "match_pattern" file_name --color=auto

标记匹配的颜色 --color=auto

grep -C10 pattern filename

查询关键字前后各十行


持续记录中