Linux服务器查看日志文件命令技巧

Linux服务器查看日志文件命令技巧

文章目录

  • Linux服务器查看日志文件命令技巧
  • grep /zgrep
  • tail
  • less
  • cat
  • sed
  • awk


grep /zgrep

grep和zgrep命令用于在文件中搜索匹配指定模式的字符串,zgrep一般用于压缩文件的搜索。

语法:

grep [选项] '搜索PATTERN' 文件名/选项为-r时为文件夹名
-i:不区分大小写
-v:显示不包含匹配文本的行,可以理解为反向匹配
-c:只输出匹配行的数目,匹配到多少行数,就打印多少行数
-n:打印匹配行及行号,除了打印出对应的字符外,左侧会有行号显示。
-r:递归搜索子目录,可以对一个文件夹进行递归搜索。
-a:将二进制文件以文本文件的方式进行处理,打印所有可打印的字符,忽略二进制文件的数据格式。将其视为文本文件搜索。一般用于压缩文件

grep实例:
需要查询日志文件 2023-07-24-09.log 中有关 ‘确认到岗消息提醒定时任务开启’ 的内容。

grep '确认到岗消息提醒定时任务开启' 2023-07-24-09.log

输出:
在这里插入图片描述

zgrep实例:
需要查询压缩的日志文件 2023-07-24-09.tar.gz 中有关 ‘确认到岗消息提醒定时任务开启’ 的内容。

zgrep -a '确认到岗消息提醒定时任务开启' 2023-07-24-09.tar.gz

输出:
在这里插入图片描述


tail

tail命令常用来输出文件末尾内容
语法:

tail [选项] [文件]
-n NUM:显示最后NUM行内容
-f:持续监听文件变化
-q:不输出文件名,只显示内容,一般查看输出多个文件时使用。
-c NUM:显示最后NUM字节内容

示例:

# 输出文件后缀为 .log 所有文件最后20行。且不展示文件名。
tail -q -n 20 *.log

输出:
Linux服务器查看日志文件命令技巧_第1张图片
除此之外,tail命令还可以和grep命令组合使用。
示例:

# 实时查看 2023-07-24-14.log 中有关于'header从redis中获取用户信息'字符的信息。这里只会打印过滤的信息。
tail -f 2023-07-24-14.log |grep 'header从redis中获取用户信息'

在这里插入图片描述


less

less命令在Linux系统中是一种非常有用的分页阅读器,常用于分屏浏览文本文件内容。
语法:

less 文件名
向上翻页:b键、page up
向下翻页:空格键、page down
向上跳转一行:ctrl+e
向下跳转一行:crtl+b
向上半屏:ctrl+b
向下半屏:ctrl+y
跳转文件开头:g
跳转文件末尾:G
退出less:q
交互命令:
-v:使用vim编辑器浏览
-h:显示less的使用帮助
- &pattern:只显示匹配模式的行
- n:重复前一个搜索

用法:
在查询到指定日志关键字后,可能需要进一步确定这个日志附近的日志。如报错后。想看堆栈信息。可以使用less命令

less  2023-06-15-15.log

使用less打开文件之后,可以使用 / 正向搜索者 ? 反向搜索匹配字符,找到附近的堆栈信息。同时可以使用n跳转下一个匹配的位置,N跳转上一个匹配的位置。

注:这个命令在处理大文件时比较伤内存


cat

cat命令在Linux系统中常用来显示文本文件内容,以及将文件连接起来。
语法:

cat 文件名
- 查看文件内容:cat FileName
- 将多个文件内容连接起来显示:cat File1 File2
- 将文件内容追加到另一个文件:cat File1 >> File2
- 对文件进行编号:cat -n FileName
- 禁止显示多余的空白字符:cat -s FileName
- 显示特殊字符:cat -A FileName
- 从最后向前显示文件内容:cat -b FileName
cat的一些有用组合命令:
- cat File1 File2 > NewFile :将两个文件合并到新文件
- cat < File1 - | wc -l :统计文件行数
- cat < File1 - | grep 'String' :在文件中搜索字符串

sed

sed是Linux系统中非常强大的流编辑器,可以对标准输入或文件进行处理、编辑。正常情况下,sed命令所做的处理只是把操作结果(包括打印、删除等)输出到当前终端屏幕,而并不会对原始文件做任何更改,若希望直接修改文件内容,应添加选项 -i
语法:

sed  '3,5d' a.txt             // 删除第3~5行
sed  '/xml/d' a.txt            // 删除所有包含xml的行
sed  '/xml/!d' a.txt         // 删除不包含xml的行,!符号表示取反
sed  '/^install/d' a.txt    // 删除以install开头的行
sed  '$d' a.txt                // 删除文件的最后一行
sed  '/^$/d' a.txt             // 删除所有空行
sed  '2a XX'   a.txt            // 在第二行后面,追加XX
sed  '2i XX'   a.txt            // 在第二行前面,插入XX
sed  '2c XX'   a.txt            // 将第二行替换为XX
sed 's/old/new/g'  sed 's/old/new/3'        // g表示替换所有匹配,3表示只替换每行的前3个匹配

如果日志文件很大,例如有5g大小的日志文件,使用·grep·定位某个请求的位置,同时使用sed查看该行日志附近的内容,示例:

grep -n 维护待入职员工 2023-07-25-09.log

可以查到我们需要的关键字的行号在169行
在这里插入图片描述
使用sed查询行号 160~180 的日志

sed -n '160,180p' 2023-07-25-09.log

awk

awk是Linux系统中非常强大的文本处理工具,它的用法非常丰富。处理文本文件的语言,强大的文本分析工具。
语法:

1. 打印文件每一行
awk '{print}' filename
2. 使用分隔符截取字段(可以理解为java中String的split,只是分隔处理的下标+1)
awk -F ':' '{print $1}' filename 
# 使用冒号截取passwd的第一列
3. 条件过滤
awk '/grep/ {print $1}' filename
# 打印包含"grep"的行的第一列
4. 数学运算
awk '{print $1 * $2}' filename
# 将第一列和第二列相乘然后打印
5. 按行聚合
awk '{sums+=$1} END {print sums}' filename
# 将第一列的数累加,并在结束时打印总和
6. 统计行数
awk 'END{print NR}' filename

有一个需要查询出日志中所有接口调用的场景。
示例:
在这里插入图片描述
使用awk获取所有的接口名称

grep -n "【请求地址】:" 2023-07-25-09.log | awk -F '【请求地址】:' '{print $2}' | awk -F '【请求参数 json】:' '{print $1}'

Linux服务器查看日志文件命令技巧_第2张图片

你可能感兴趣的:(服务器,linux,运维)