linux怎么获取单条日志时间

linux怎么获取单条日志时间,第1张

截取一段时间内的log日志可以使用sed命令对log文件进行抽取 *** 作:

1,sed查看某时间段到现在的系统日志:

sed -n '/May 20 17/,$p' /var/log/messages | less

2,sed 截选时间段日志:

假如日志的格式是--

“2015-05-04 09:25:55,606 后面跟日志内容 ”这样的

目标是需要将05-04的09:25:55 和09:28:08 之间的日志截取出来:

使用sed命令如下:

sed -n ‘/2015-05-04 09:25:55/,/2015-05-04 09:28:55/p’ logfile

这样可以精确地截取出来某个时间段的日志。

如果需要截取的日志太大,达到几个G的话,不能去vi打开文件:

根据之前的日志格式,使用正则表达式:

sed -n ‘/2010-11-17 09:[0-9][0-9]:[0-9][0-9]/,/2010-11-17 16:[0-9][0-9]:[0-9][0-9]/p’ logfile

如果没有问题的话,上面就能筛选出指定的时间段的日志。

USER —登录的用户名

TTY —登录后系统分配的终端号

FROM—远程主机名,即从哪儿登录来的

LOGIN@—何时登录

IDLE—空闲了多长时间,表示用户闲置的时间。这是一个计时器,一旦用户执行任何 *** 作,该计时器便会被重置

JCPU—和该终端(tty)连接的所有进程占用的时间,这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间

PCPU—指当前进程(即在WHAT项中显示的进程)所占用的时间

WHAT—当前正在运行进程的命令行

例如:

user3 pts/39 192.168.0.5 07Jul13 2:11m 1.62s 1.58s ssh 10.1.1.2

user3用户2013年7月7日从IP 192.168.0.5登录到本机,终端号pts/39,已经2小时11分没有 *** 作了,登录后其所有进程占用CPU时间1.62秒,当前执行的程序是ssh 10.1.1.2,占用CPU时间1.58秒

这个问题我觉得用 awk 比较好实现。我试了一个,不过没找到怎么直接处理这个非数字的月份问题,使用数组来做了一个转换,所以脚本长了一点。

下面是用 message 日志来做的测试,你可以换成你的日志文件来测试看看效果。

你可以更改 time_period 的值来达到想要其它时间内的日志。

# awk -F'[ :]+' 'BEGIN{time_period=5*3600 mon["Jan"] = 1 mon["Feb"] = 2 mon["Mar"] = 3 mon["Apr"] = 4 mon["May"] = 5 mon["Jun"] = 6 mon["Jul"] = 7 mon["Aug"] = 8 mon["Sep"] = 9 mon["Oct"] = 10 mon["Nov"] = 11 mon["Dec"] = 12 now=systime()} now - mktime("2013 " mon[$1] " " $2 " " $3 " " $4 " " $5) <= time_period {print}' messages

  Aug 13 05:15:01 test ntpdate[26717]: the NTP socket is in use, exiting

  Aug 13 05:25:01 test ntpdate[26782]: the NTP socket is in use, exiting

  Aug 13 10:05:01 test ntpdate[29013]: the NTP socket is in use, exiting

  Aug 13 10:10:01 test ntpdate[29076]: the NTP socket is in use, exiting


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7313356.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存