我们还是喜欢在服务器查看实时日志,也经常在服务器,测试环境服务器查看日志,所以今天也总结一些查看日志的命令,也总结一下awk这个很6的命令。
一、linux日志查询常用命令
1、tailf mywork.log | grep --line-buffered timed out
实时跟踪日志,这里是只要findUserList 这个方法被运行,就会将它的日志打印出来,用于跟踪特定的日志运行。 --line-buffered 是一行的缓冲区,只要这一行的缓冲区满了就会打印出来,所以可以用于实时监控日志。
2、 tailf -n 500 mywork.log
打印最后500行日志,并且持续跟踪日志。
tail -n 2000 mywork.log | more
分页查看最后2000行日志。
3、 grep 'timed out' mywork.log | more
将有关 ‘调用远程服务运行结果是’ 字符串的结果都打印出来,并且是分页打印,用于日志太多的情况。用空格翻页。
4、 cat mywork.log | grep '查看前后100行' -C 100
cat mywork.log | grep '查看前100行' -B 100
cat mywork.log | grep '查看后100行' -A 100
7、按照行号查看日志
wc -l mainCms.log
显示文件一共有多少行。
cat -n mywork.log | tail -n +92|head -n 20
表示先查看92行之后的日志,然后在看这92行之后的日志的前20行。也就是查看92到112行之间的日志。sed -n '5,10p' mywork.log
查看5行到10行的日志。
8、按日期查看日志
sed -n '/2018-05-26 17:07:00/,/2018-05-26 17:06:59/p' mywork.log
sed -n '/2018-08-16 18:/p' mainCms.log | less -mN
9、grep -E '123|abc' mywok.log
找出包含123或者abc的行。
10、head example.txt 显示文件 example.txt 的前十行内容;
head -n 20 example.txt
显示文件 example.txt 的前二十行内容;
11、ctrl+G
直接查看最后一页日志 ctrl+b
向前翻页 ctrl+n
向后翻页
二、awk命令详解
awk命令说明: AWK是一种处理文本文件的语言,是一个强大的文本分析工具。支持正则匹配输出。
1、基本用法
一段文本:cat log.txt
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
用法一:
awk ‘{[pattern] action}’ {filenames} # 行匹配语句 awk ” 只能用单引号
实例:
# 每行按空格或TAB分割(默认情况),输出文本中的1、4项
$ awk '{print $1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
---------------------------------------------
# 格式化输出
$ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
用法二:
awk -F #-F相当于内置变量FS, 指定分割字符
实例:
# log.txt的内容如下:
# 2,this,is,a,test
# 3 Are you like awk
$ awk -F, '{print $1,$2}' log.txt
---------------------------------------------
2 this
3 Are you like awk
# 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
$ awk -F '[ ,]' '{print $1,$2,$5}' log.txt
---------------------------------------------
2 this
3 Are
用法三:
awk -v # 设置变量
实例:
$ awk -va=1 '{print $1,$1+a}' log.txt
---------------------------------------------
2 3
3 4
This's 1
10 11
$ awk -va=1 '{print $1,$(1+a)}' log.txt
---------------------------------------------
2 this
3 Are
This's a
10 There
$ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
---------------------------------------------
2 3 2s
3 4 3s
This's 1 This'ss
10 11 10s
用法四:
awk -f {awk脚本} {文件名}
$ awk -f cal.awk log.txt
2、运算符
过滤第一列大于2的行
$ awk '$1>2' log.txt #命令
#输出
3 Are you like awk
This's a test
10 There are orange,apple,mongo
过滤第一列等于2的行
$ awk '$1==2 {print $1,$3}' log.txt #命令
#输出
2 is
过滤第一列大于2并且第二列等于’Are’的行
$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt #命令
#输出
3 Are you