Bootstrap

Linux查看日志文件的一些命令


前言

在公司实习测试期间,需要登录堡垒机查看系统日志,现在梳理一些我平时常用的查看的日志的命令。


一、实时查看日志

1.tail -f /var/log/app.log

该命令会输出app.log文件的最后10行,并实时监控文件的变化,新写入的行会持续显示出来。按Ctrl+C可以退出。

示例:

$ tail -f /var/log/app.log
2023-03-27 10:12:34 INFO Started application
2023-03-27 10:12:36 ERROR Failed to connect to database
2023-03-27 10:12:40 WARNING Low memory available
... 
(从这里开始新增的日志会持续显示)

2.tail -n 200 -f /var/log/app.log

与上一命令类似,但指定输出最后200行,然后持续监控文件变化。

3.tailf /var/log/app.log (需先安装tailf工具)

该工具比tail更强大,可以高亮显示新增的日志行,方便区分。


二、关键字搜索

1. grep 'keyword' /var/log/app.log

在app.log文件中搜索包含"keyword"的所有行

示例:

$ grep 'ERROR' /var/log/app.log
2023-03-27 10:12:36 ERROR Failed to connect to database
2023-03-27 14:23:15 ERROR Timeout when calling remote service

2. grep -i 'KEYWORD' /var/log/*.log

搜索多个日志文件,并忽略大小写匹配"KEYWORD"

3. grep -C 5 'keyword' /var/log/app.log

搜索关键字,并显示匹配行的上下5行,以显示更多上下文。

4. awk '/keyword/ {print $0}' /var/log/app.log

使用awk工具打印包含"keyword"的完整行。


三、上下文查看

1. vi +/keyword /var/log/app.log

使用vi编辑器打开app.log文件,并直接跳转到第一个匹配"keyword"的位置。在vi中,你可以使用n/N键跳转到下一个/上一个匹配处。
1、进入vim编辑模式:vi app.log
2、输入“/关键字”,按enter键查找
3、查找下一个,按“n”即可( n 查找上一处错误日志 N 查找下一处错误日志)
4 、
ctrl+f: 下翻一屏。
ctrl+b: 上翻一屏。
ctrl+d: 下翻半屏。
ctrl+u: 上翻半屏。
ctrl+e: 向下滚动一行。
ctrl+y: 向上滚动一行。
5、ctrl+o回到搜索的地方
退出:按ESC键后,接着再输入:号时,vi会在屏幕的最下方等待我们输入命令
wq! 保存退出;
q! 不保存退出;
其他情况:
/关键字 注:正向查找,按n键把光标移动到下一个符合条件的地方
?关键字 注:反向查找,按shift+n 键,把光标移动到下一个符合条件的

2. less +F /var/log/app.log

使用less命令打开app.log,按/键输入待搜索的关键字,按n/N键上下切换匹配处。
less支持翻页和搜索等多种操作。

3. cat -n /var/log/app.log | grep 'keyword'

先用cat -n给app.log每一行加上行号,然后再使用grep搜索,这样输出就带有行号,方便定位。


四、时间段筛选

1. sed -n '/2023-03-27 10:00/,/2023-03-27 12:00/p' /var/log/app.log

使用sed命令从app.log中只打印时间范围在2023-03-27 10:00到12:00之间的日志行。

2. awk '/2023-03-27 10:/ && /2023-03-27 12:00/' /var/log/app.log

使用awk,通过两个模式匹配的与操作,实现同样的时间段筛选。


五、多文件监控

1. multitail -i /var/log/app.log /var/log/nginx/error.log

同时实时监控多个文件,使用-i选项可以不区分大小写进行关键字高亮。

2. lnav /var/log/

lnav是一个高级日志文件查看器,打开整个/var/log目录,可通过各种过滤条件查看不同文件。


六、格式化和统计

1. awk '{print $3}' /var/log/app.log | sort | uniq -c

首先使用awk提取日志行的第三个字段(假设是错误码),然后sort排序,再通过uniq -c统计每个错误码出现的次数。

示例:

$ awk '{print $3}' /var/log/app.log | sort | uniq -c
   25 ERR_TIMEOUT  
   15 ERR_NOT_FOUND
   62 ERR_SERVER_ERROR
    8 ERR_PERM_DENIED

2. sed 's/^[0-9]*//' /var/log/app.log

使用sed对app.log的每一行执行替换,去掉行首的时间戳信息。可用于只查看日志消息本身的内容。


总结

一般就用tail、cat、grep、vim就能满足大部分需求了。

;