前言
在公司实习测试期间,需要登录堡垒机查看系统日志,现在梳理一些我平时常用的查看的日志的命令。
一、实时查看日志
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就能满足大部分需求了。