0%

linux | 如何查看日志文件

在看这个文章之前,建议你先看一下我之前的博文。

linux | 查看文件内容

linux 如何显示一个文件的某几行(中间几行)

从第3000行开始,显示1000行。即显示3000~3999行

cat test.log | tail -n +3000 | head -n 1000

显示1000行到3000行

cat test.log | head -n 3000 | tail -n +1000

注意两种方法的顺序

分解:

tail -n 1000:显示最后1000行
tail -n +1000:从1000行开始显示,显示1000行以后的
head -n 1000:显示前面1000行

用sed命令

sed -n '5,10p' test.log 这样你就可以只查看文件的第5行到第10行
cat test.log | tail -n 1000 # 输出mylog.log 文件最后一千行

cat

cat主要有三大功能:

一次显示整个文件。

cat filename

从键盘创建一个文件。

cat > filename 

只能创建新文件,不能编辑已有文件.

将几个文件合并为一个文件:

cat file1 file2 > file

参数:

  • -n--number 由 1 开始对所有输出的行数编号
  • -b--number-nonblank-n 相似,只不过对于空白行不编号
  • -s--squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
  • -v--show-nonprinting

例:

把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里

cat -n textfile1 > textfile2

把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。

cat -b textfile1 textfile2 >> textfile3

把test.txt文件扔进垃圾箱,赋空值test.txt

cat /dev/null > /etc/test.txt 

注意:>意思是创建,>>是追加。千万不要弄混了。

tac

tac (反向列示)

tac 是将 cat 反写过来,所以他的功能就跟 cat 相反。

cat 是由第一行到最后一行连续显示在萤幕上,

而 tac 则是由最后一行到第一行反向在萤幕上显示出来!

echo

在Linux中echo命令用来在标准输出上显示一段字符,比如:

echo "the echo command test!"

这个就会输出“the echo command test!”这一行文字!

echo "the echo command test!">a.sh

这个就会在 a.sh 文件中输出“the echo command test!”这一行文字!

该命令的一般格式为: echo [ -n ] 字符串其中选项n表示输出文字后不换行;字符串能加引号,也能不加引号。

用echo命令输出加引号的字符串时,将字符串原样输出;

用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。

grep 同时满足多个关键字和满足任意关键字

满足任意条件

grep -E "word1|word2|word3"   file.txt

满足任意条件(word1、word2和word3之一)将匹配。

满足所有条件

grep word1 file.txt | grep word2 |grep word3

必须同时满足三个条件(word1、word2和word3)才匹配。

多管道,多次筛选。

使用正则表达式 -E 选项

grep -E "[1-9]+" 

egrep "[1-9]+"

常用命令

查看日志常用命令

tail:  
   -n  是显示行号;相当于nl命令;例子如下:
        tail -100f      test.log        实时监控100行日志
        tail  -n  10    test.log        查询日志尾部最后10行的日志;
        tail -n +10     test.log        查询10行之后的所有日志;
head:  
    跟tail是相反的,tail是看后多少行日志;例子如下:
        head -n 10      test.log   查询日志文件中的头10行日志;
        head -n -10     test.log   查询日志文件除了最后10行的其他所有日志;
cat: 
    tac是倒序查看,是cat单词反写;例子如下:
        cat -n test.log |grep "debug"   查询关键字的日志

按行号查看—过滤出关键字附近的日志

cat -n test.log | grep "debug"

得到关键日志的行号

cat -n test.log | tail -n +92 | head -n 20
    tail -n +92 表示查询92行之后的日志
    head -n 20 则表示在前面的查询结果里再查前20条记录

另外,假如说,我们一个目录下面有多个文件比如

error.02-03.log
error.02-04.log
error.02-05.log

我们执行 cat error* | grep -i bitmex_swap

假设出现

12222 2021-02-04 06:26:32.946 [BITMEX_SWAP] ERROR okhttp3.WebSocketListener - sub BITMEX_SWAP connection is closing due to error

你如果使用

cat error.02-04.log | tail -n +12222 | head -n 20

是查不到这个数据的,因为,这个 12222 是三者的综合排序,所以,你应该查一下

cat -n error.02-04.log | grep "bitmex_swap"

这里面的正确序号。

根据日期查询日志

sed -n '/2017-08-23 00:05:00,446/,/2017-08-23 00:05:00,546/p'  test.log

特别说明:上面的两个日期必须是日志中打印出来的日志,否则无效;

先 grep ‘2014-12-17 16:17:20’ test.log 来确定日志中是否有该 时间点

日志内容特别多,打印在屏幕上不方便查看

使用 more 和 less 命令,

cat -n test.log |grep "debug" |more     

这样就分页打印了,通过点击空格键翻页

使用 >xxx.txt 将其保存到文件中,到时可以拉下这个文件分析

cat -n test.log |grep "debug"  >debug.txt

more命令

more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。

该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:–More–(XX%)

可以用下列不同的方法对提示做出回答:

按键 说明
按Space键 显示文本的下一屏内容。
按B键 显示上一屏内容。
按Enter键 只显示文本的下一行内容。
按斜线符 接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
按H键 显示帮助屏,该屏上有相关的帮助信息。
按Q键 退出more命令
请我喝杯咖啡吧~