先必须了解两个最基本的命令:
tail -n 10 test.log 查询日志尾部最后10行的日志;
tail -n +10 test.log 查询10行之后的所有日志;
head -n 10 test.log 查询日志文件中的头10行日志;
head -n -10 test.log 查询日志文件除了最后10行的其他所有日志;
场景1: 按行号查看---过滤出关键字附近的日志
因为通常时候我们用grep拿到的日志很少,我们需要查看附近的日志.
我是这样做的,首先: cat -n test.log |grep "地形" 得到关键日志的行号
<3>得到"地形"关键字所在的行号是102行. 此时如果我想查看这个关键字前10行和后10行的日志:
cat -n test.log |tail -n +92|head -n 20
tail -n +92表示查询92行之后的日志
head -n 20 则表示在前面的查询结果里再查前20条记录
场景2:那么按日期怎么查呢? 通常我们非常需要查找指定时间端的日志
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
特别说明:上面的两个日期必须是日志中打印出来的日志,否则无效.
关于日期打印,可以先 grep '2014-12-17 16:17:20' test.log 来确定日志中是否有该时间点,以确保第4步可以拿到日志
这个根据时间段查询日志是非常有用的命令.
如果我们查找的日志很多,打印在屏幕上不方便查看, 有两个方法:
(1)使用more和less命令, 如: cat -n test.log |grep "地形" |more 这样就分页打印了,通过点击空格键翻页
(2)使用 >xxx.txt 将其保存到文件中,到时可以拉下这个文件分析.如:
cat -n test.log |grep "地形" >xxx.txt
7
这几个日志查看方法应该可以满足日常需求了.
几个命令:
tail 命令常见用法
总览:
tail [option]...[file]...
描述:
在标准输出上显示每个File的最后10行。如果多于一个File,会一个接一个地显示,并且在每个文件显示的首部给出文件名。如果没有file,或者file是-,那么就从标准输入上读取。
--retry
即使tail开始就不能访问或者tail运行后不能访问,也不停尝试打开文件,-- 只与-f合用时有用
-c, --bytes=N
输出最后N个字节
-f, --follow=[{name|descriptor}]
当文件增长时,输出后续添加的数据;-f --follow以及--follow=descriptor都是同样的意思
-n, --lines=N
输出最后N行,而并非默认的最后10行
cat命令常见用法
总览:
cat [选项列表] [文件列表]
描述:
将文件列表中的文件或标准输出连接到标准输出
-A, --show-all
-b, --number-noneblank 给非空行输出编号
-E, --show-ends 在每行结束显示$
-n, --number 给所有输出行编号
-s, --sequzee-blank 将所有连续的多个空行替换为一个空行
head命令的常见用法
总览:
head [option]...[file]...
描述:
在标准输出上显示每个file的起始10行。如果多于一个file,则一个接一个显示,并且在每个文件显示的首部给出文件名。如果没有file,或者file为-,那么就从标准输入上读取
-c, --bytes=SIZE 打印起始的size字节
-n, --lines=NUMBER 显示起始的NUMBER行,而非默认的起始10行
-q, --quiet, --silent 从不显示给出文件名的首部
-v, --verbose 总是显示给出文件名的首部
grep命令的常见用法
总览:
grep [options] patten [file...]
描述:
grep搜索以File命名的文件输入(或者是标准输入,如果没有指出文件名,或者给出的文件是-的话),寻找含有与给定的模式 Pattern相匹配的内容的行。默认情况下,grep将含有匹配内容的行打印出来。
-A NUM, --after-context=NUM 打印出紧随匹配行之后的下文NUM行。在响铃的匹配组之间将会打印内容是-- 的一行
-B NUM, --before-context=NUM 打印出匹配行之前的上问NUM行。在响铃的匹配组之间将会打印内容是--的一行
-C NUM, --context=NUM 打印出匹配行的上下文前后各NUM行。在相邻的匹配组之间将会打印内容是--的一行
-G, --basic-regexp 将模式PATTERN作为一个基本的正则表达式来解释
-i, --ignore-case 忽略模式pattern和输入文件中大小写的分别
-n, --line-number 在输出的每行前面加上它所在的文件中它的行号
-o, --only-matching 只显示匹配行中与Pattern相匹配的部分
-r, -R, --Recursive 递归地读取每一目录下的所有目录