做网络监控的时候,经常要查日志。比如服务器出问题了,想看看昨天下午3点到5点之间有没有异常请求。这时候如果手动翻文件,费时又容易出错。其实用bash的日期操作命令,几行代码就能精准定位目标时间段的日志。
获取当前时间很简单
在终端里输入下面这句,就能看到现在的时间:
date +"%Y-%m-%d %H:%M:%S"输出像这样:2024-04-05 15:30:22。格式可以根据需要调整,%Y是四位年份,%m是月份,%d是几号,%H、%M、%S分别是时分秒。
往前推几天也能算
比如你想查前天的访问日志,可以这样写:
yesterday=$(date -d "2 days ago" +"%Y-%m-%d")然后配合grep去查日志文件:
grep "$yesterday 15:" /var/log/nginx/access.log这就把前天下午3点左右的请求都筛出来了,排查问题快多了。
生成时间戳做文件备份名
有时候要定期备份配置文件,加上日期更清楚。比如写个脚本自动备份:
cp /etc/nginx/nginx.conf /backup/nginx.conf.$(date +"%Y%m%d_%H%M")备份出来的文件名就是 nginx.conf.20240405_1530 这种格式,一目了然。
跨小时段查日志也方便
要是问题发生在跨小时的时间段,比如从14:58到15:03,直接按字符串匹配会漏掉。可以用date命令生成精确范围:
start_time=$(date -d "14:58" +"%H:%M")
end_time=$(date -d "15:03" +"%H:%M")
awk -v start="$start_time" -v end="$end_time" '$4 ~ /\[.*:'start'.*:.*\]/ || $4 ~ /\[.*:'end'.*:.*\]/' /var/log/nginx/access.log虽然awk部分有点复杂,但核心还是靠date命令提供准确的时间点。
这些小技巧用熟了,查日志就像翻手机相册按时间找照片一样顺手。不用再打开一堆文件肉眼扫描,效率高了不少。