![我可以从过去 15 分钟内在 bash 中执行的历史记录中获取命令吗?](https://linux22.com/image/892307/%E6%88%91%E5%8F%AF%E4%BB%A5%E4%BB%8E%E8%BF%87%E5%8E%BB%2015%20%E5%88%86%E9%92%9F%E5%86%85%E5%9C%A8%20bash%20%E4%B8%AD%E6%89%A7%E8%A1%8C%E7%9A%84%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%91%BD%E4%BB%A4%E5%90%97%EF%BC%9F.png)
我想设置一个 cron 作业,向我发送有关过去 15 分钟内执行的特定命令的通知。我可以使用 获取历史记录以及时间戳export HISTTIMEFORMAT='%F %T'
,但我真的不知道如何仅根据过去 15 分钟内执行的命令对其进行过滤。有人可以建议我这样做吗?
答案1
如果使用不同的时间格式(可以,因为设置HISTTIMEFORMAT
为任何值都足以让 bash 跟踪时间),会更简单。因此,使用 Unix 时间戳,以及现在和那时之间的差异:
HISTTIMEFORMAT='%s ' history | awk -v now=$(date +%s) '(now - $2) < 15*60'
date +%s
是当前的 Unix 时间戳,历史记录输出的第二列是字段HISTTIMEFORMAT
,因此这会检查秒数差是否小于 15 分钟。
但是,如果您的目的是监视命令的使用情况,那么这实际上不是一个可行的方法。设置审计而是(可以将其配置为监视命令执行)。