我要实现的目标:
我想按日期(即执行时)过滤系统日志文件:
$ cat /var/log/syslog | grep -i "error\|warn\|kernel"
最后三天,它会打印这样的行:
(...)
Apr 3 06:17:38 computer_name kernel: [517239.805470] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready
(...)
Apr 4 19:34:21 computer_name kernel: [517242.523165] e1000e: enp0s25 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
(...)
Apr 5 09:00:52 computer_name kernel: [517242.523217] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s25: link becomes ready
如何grep(选择或过滤):
- 按日期?
- 按日期+小时?
我试过的
$ cat /var/log/syslog | grep -i "Apr 5" | grep -i "error\|warn\|kernel"
它可以按预期在syslog
文件上运行,但不能在kern.log
文件上运行,例如,该文件仅返回:Binary file (standard input) matches
。当我tail
看到这个特定文件时,可以看到与文件中相同的开始日期格式syslog
。
题:
如何在其他日志(如kern.log
文件)上实现相同功能?
另外,是否可以过滤:
- 按日期范围?
- 按日期+小时范围?
提示:如果可能,请使用“易于记忆的命令”。