查日志常见技巧
tail
tail -n 10 test.log 查询日志尾部最后10行的日志;
tail -n +10 test.log 查询10行之后的所有日志;
head
head -n 10 test.log 查询日志文件中的头10行日志;
head -n -10 test.log 查询日志文件除了最后10行的其他所有日志;
cat
cat -n test.log | grep 'error' 查询日志中含有某个关键字的信息,显示出行号
less
命令格式:less [参数] 文件
命令参数:
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将“tab”键显示为规定的数字空格
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
附加:
1.全屏导航
ctrl + F - 向前移动一屏
ctrl + B - 向后移动一屏
ctrl + D - 向前移动半屏
ctrl + U - 向后移动半屏
2.单行导航
j - 向前移动一行
k - 向后移动一行
3.其它导航
G - 移动到最后一行
g - 移动到第一行
q / ZZ - 退出 less 命令
4.其它有用的命令
v - 使用配置的编辑器编辑当前文件
h - 显示 less 的帮助文档
&pattern - 仅显示匹配模式的行,而不是整个文件
5.标记导航
当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:
ma - 使用 a 标记文本的当前位置
'a - 导航到标记 a 处
6.查找
more, less 都具备查找功能,按/ 然后输入要找的字串,再按 Enter 即可,按 n(next) 会继续找,大写的 N 则是往回(上)找,按 q(quit)或者ZZ离开
场景
场景1: 按行号查看---过滤出关键字附近的日志
因为通常时候我们用grep拿到的日志很少,我们需要查看附近的日志.
我是这样做的,首先: cat -n test.log | grep "地形" 得到关键日志的行号
如得到"地形"关键字所在的行号是102行. 此时如果我想查看这个关键字前10行和后10行的日志:
cat -n test.log |tail -n +92|head -n 20
tail -n +92表示查询92行之后的日志
head -n 20 则表示在前面的查询结果里再查前20条记录
场景2:查看指定时间段内的日志
sed -n '/2017-02-23 10:00:00/,/2017-02-23 10:06:23/p' test.log
sed -n '/2017-02-23 10:00:/,/2017-02-23 10:06:/p' test.log
这个需要注意的地方是10:00:00或者10:00必须出现过.
如果没有任何日志出现.请先查看是否存在
grep "2017-02-23 10:00" test.log
场景3:查看日志中特定字符的匹配数目
grep "abcd" test.log | wc -l
场景4:实时查看日志
tail -f test.log
场景5:查询最后20行,并查找关键字“结果”
tail -n 20 test.log | grep '结果'
场景6:查询最后20行,并查找关键字“结果”,文字标红
tail -n 20 test.log | grep '结果' --color
场景7:查询最后20行,并查找关键字“结果”,文字标红,上下扩展两行
tail -n 20 test.log | grep '结果' --color -a2
场景8:分页查看,使用空格翻页(使用more/less)
cat -n test.log | grep "error" | more
场景9:日志文件超大时,使用vim查找
vim test.log 打开文件
ctrl + g 移动至文件末尾
:? com.fm.fdata 从最后往上查找关键字,点N往上
场景10:浏览多个文件
less test2.log test.log
输出:
1 ifconfig 2 ping www.baidu.com 3 ifconfig 4 //10.128.161.108/share 5 10.128.161.108/share 6 ssh 7 keygen 8 trsa 9 ssh 10 .ssh/ test2.log (file 1 of 2) (END) - Next: test.log
输入 :n后,切换到 test.log
输入 :p 后,切换到test2.log
ps:当正在浏览一个文件时,也可以使用 :e命令 打开另一个文件。
命令:
less file1 :e file2
场景11 复杂查询截取排序
less catalina.out | grep -B 3 "getRelatedTTSDomainPrefixs" | grep "QMQ消息处理异常,消息体" | awk -F "orderNo" '{print $2}' | awk -F "id" '{print $1}' | awk -F ":" '{print $2}' | awk -F "," '{print $1}' | awk -F "\\\"" '{print $2}' | awk -F "\\\\" '{print $1}' | sort | uniq -c | less