Linux日志超实用讲解
1、前言
Linux相对于Windows有更高的网络安全性,最主要是其在网络环境下强大的稳定性,所以应用服务多部署于Linux内核系统的服务器上。导致Linux上日志的查询处理更是家常便饭!
2、tail 命令
2.1、动态监听日志
tail -f 日志文件名
,动态打印日志文件最后10行,会进行动态监听,在服务器上多用于使用监听幂等操作的日志;
举例:如果一个查询操作报错,那么就可以首先在对应服务日志文件处使用此命令监听,然后再操作报错的查询,那么就能动态监听其打印的日志,由于查询操作并不会改变数据,所以在生产环境即使被操作多次也无妨!
# 进入日志目录
$ cd /data/logs/UserData/run/
# 动态查看日志最后10条
$ tail -f run_UserData_172.17.0.1_10007.log
# 从日志尾部往上截取20条
$ tail -20 run_UserData_172.17.0.1_10007.log
2.2、日志动态截取
tail -f 日志文件名 > 自定义文件
,使用此命令会可将监听到的日志动态的写入到自定义的文件中,使用Ctrl + c
结束写入。
举例:遇到同上2.1的问题,规范的管理流程,生产环境是由运维人员进行管理的,开发人员是无权访问的。如果生产环境出现问题,那么报错日志就需要运维人员截取给开发人员!
# 将日志动态写入自定义文件 user.log
# 如果没有user.log则会自动创建,如果存在内容则会被覆盖
$ tail -f run_UserData_172.17.0.1_10007.log > user.log
# 追加写入:会从user.log的内容尾部开始写入,不会覆盖掉原有内容
$ tail -f run_UserData_172.17.0.1_10007.log >> user.log
3、日志定位截取
3.1、关键字收索定位
通过管道命里组合查询:cat 日志文件 | grep -n 搜索内容
$ cat UserData_172.17.0.1_10007.log | grep -n 学校组织机构同步开始
19645:2022-07-21 03:30:01.140 1 scheduling-1 INFO c.a.s.d.p.t.SchoolDataSyncTask:104 - 学校组织机构同步开始=====
推荐使用:使用grep
可以满足通用情况所有日志快速定位查询!
定位查询并显示行号:grep -n '关键词' 文件名
$ grep -n '学校组织机构同步开始' run_UserData_172.17.0.1_10007.log
19645:2022-07-21 03:30:01.140 1 scheduling-1 INFO c.a.s.d.p.t.SchoolDataSyncTask:104 - 学校组织机构同步开始=====
# 截取时间关键字,并显示行号
$ grep -n '2022-07-21 03:30:01' run_UserData_172.17.0.1_10007.log
19645:2022-07-21 03:30:01.140 1 scheduling-1 INFO c.a.s.d.p.t.SchoolDataSyncTask:104 - 学校组织机构同步开始=====
19646:2022-07-21 03:30:01.281 1 scheduling-1 INFO c.a.s.d.p.u.BoShiLeServiceUtil:53 -
关键字前后查指定行数:grep -B|A|C 行数 '关键词' 文件名
扫描二维码关注公众号,回复:
15241221 查看本文章
# 关键字前查两行
$ grep -B 2 '学校组织机构同步开始' run_UserData_172.17.0.1_10007.log
# 关键字后查两行
$ grep -A 2 '学校组织机构同步开始' run_UserData_172.17.0.1_10007.log
推荐使用:查询关键前后几行,一般用于报错日志的查询,对异常关键字进行检索,报错信息的处理通常是前后日志一起排查!
# 关键字查看前后2行日志
$ grep -C 2 '学校组织机构同步开始' run_UserData_172.17.0.1_10007.log
# 如果内容太长,写入自定义文件后查看
$ grep -C 2 '学校组织机构同步开始' run_UserData_172.17.0.1_10007.log > user.log
3.2、日志区间截取
之前已经讲到了关键字查询显示行号,在代码层关键位置会有日志标记,将其关键字检索出行号,进行行号区间日志截取、时间区间日志截取!
# 截取19646~19846区间的200行数据
$ sed -n '19646, 19846p' run_UserData_172.17.0.1_10007.log
# 写入自定义文件查看
$ sed -n '19646, 19846p' run_UserData_172.17.0.1_10007.log > user.log
# 截取自定义时间段
$ sed -n '/2022-07-21 03:30:01/, /2022-07-21 03:32/p' run_UserData_172.17.0.1_10007.log > user.log
4、日志大小查看
$ cd /home/
# 查看磁盘分区占用情况
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 24K 1.9G 1% /dev/shm
tmpfs 1.9G 636K 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/vda1 79G 15G 61G 20% /
tmpfs 379M 0 379M 0% /run/user/0
# 使用此命令在日志目录下使用即可!
# 查看某个目录下各个文件的大小
$ du -ah --max-depth=1
1.5G ./dtian
48K ./lighthouse
54M ./test
12K ./script
1.6G .