1.查看日志可能使用到的命令介绍
tail
从尾部输出日志,-n 是显示行号;相当于nl命令;例子如下:
-
tail -100f test.log 实时监控100行日志
-
tail -n 10 test.log 查询日志尾部最后10行的日志
-
tail -n +10 test.log 查询10行之后的所有日志
head
跟tail是相反的,head是看头部多少行日志:
-
head -n 10 test.log 查询日志文件中的头10行日志
-
head -n -10 test.log 查询日志文件除了最后10行的其他所有日志
cat
cat命令主要用来查看文件内容,创建文件,文件合并,追加文件内容等功能
-
cat f1.txt,查看f1.txt文件的内容
-
cat -n f1.txt,查看f1.txt文件的内容,并且由1开始对所有输出行进行编号
-
cat -b f1.txt,查看f1.txt文件的内容,用法与-n相似,只不过对于空白行不编号
-
cat f1.txt f2.txt,同时显示f1.txt和f2.txt文件内容,注意文件名之间以空格分隔,而不是逗号
-
cat -n f1.txt>f2.txt,对f1.txt文件中每一行加上行号后然后写入到f2.txt中,会覆盖原来的内容,文件不存在则创建它
-
cat -n f1.txt>>f2.txt,对f1.txt文件中每一行加上行号后然后追加到f2.txt中去,不会覆盖原来的内容,文件不存在则创建它
grep
文件搜索查找命令,可使用正则、统计搜索到的次数、高亮展示搜索到的关键字等功能
参数 | 描述 |
---|---|
-e | 使用正则搜索 |
-i | 不区分大小写 |
-v | 查找不包含指定内容的行 |
-w | 按单词搜索 |
-c | 统计匹配到的次数 |
-n | 显示行号 |
-r | 逐层遍历目录查找 |
-A | 显示匹配行及后面多少行, 如: -A3, 则表示显示匹配行及后3行 |
-B | 显示匹配行及前面多少行, 如: -B3, 则表示显示匹配行及前3行 |
-C | 显示匹配行前后多少行, 如: -C3, 则表示显示批量行前后3行 |
--color | 匹配到的内容高亮显示 |
--include | 指定匹配的文件类型 |
--exclude | 过滤不需要匹配的文件类型 |
#多文件查询
grep leo logs.log logs_back.log
#查找即包含leo又包含li的行
grep leo logs.log | grep li
#查找匹配leo或者匹配li的行
grep leo | li logs.log
#显示匹配行前2行
grep leo logs.log -A2
#显示匹配行后2行
grep leo logs.log -B2
#显示匹配行前后2行
grep leo logs.log -C2
#不区分大小写
grep -i leo logs.log
#使用正则表达式
grep -e '[a-z]\{5\}' logs.log
#查找不包含leo的行
grep -v leo logs.log
#统计包含leo的行数
grep -c leo logs.log
#遍历当前目录及所有子目录查找匹配leo的行
grep -r leo .
#在当前目录及所有子目录查找所有java文件中查找leo
grep -r leo . --include "*.java"
#查找并输出到指定文件
grep leo logs.log > result.log
#查找以leo开头的行
grep ^leo logs.log
#查找以leo结尾的行
grep leo$ logs.log
#查找空行
grep ^$ logs.log
sed
- 工作原理: 先从文件中读取一行内容到模式空间里即sed专属的缓存空间,然后判断这行内容是否是需要处理的内容,如果不是就继续从文件中读取下一行,否则对改行内容进行相应处理后输出,然后继续读取下一行进行判断或处理,直到文件最后一行处理完毕整个过程结束
- 命令格式:sed 参数 功能选项 文件名或其他标准输入
- 参数:
功能 | 描述 |
---|---|
a | 追加内容到指定行后 |
i | 插入内容到指定行前 |
d | 删除指定行 |
c | 用新行替换旧行(不常用) |
s | 对每一行第一次匹配到的内容进行替换,配合标志g可以将一行中所有匹配到的内容进行替换 |
p | 输出指定内容,默认会输出2次匹配到的内容 |
使用举例见场景3
2.应用场景一:按行号查看---过滤出关键字附近的日志
-
cat -n test.log |grep "debug" 得到关键日志的行号
-
cat -n test.log |tail -n +92|head -n 20 选择关键字所在的中间一行. 然后查看这个关键字前10行和后10行的日志
-
tail -n +92表示查询92行之后的日志
-
head -n 20 则表示在前面的查询结果里再查前20条记录
-
3.应用场景二:根据日期查询日志
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.应用场景三:日志内容特别多,打印在屏幕上不方便查看
- 使用more和less命令,
如: cat -n test.log |grep "debug" |more 这样就分页打印了,通过点击空格键翻页
- 使用 >xxx.txt 将其保存到文件中,到时可以拉下这个文件分析
如:cat -n test.log |grep "debug" >debug.txt
网友评论