我正在尝试创建一个脚本来监视使用 sudo 的所有登录,包括成功和失败。
现在,我有:
set tdate = $(date "+%b %d")
set attempted_su_log = /var/log/suattempts
cat /var/log/secure | grep $tdate | grep 'servername su' >> $attempted_su_log
如何从 /var/log/secure 中 grep 当前日期,以便我只获取它们发生之日的条目?
当我跑步时
cat /var/log/secure | grep 'Mar 18' | grep 'servername su'
从命令行,我得到了我需要的结果,但我不确定如何使用当前日期将脚本编写为 grep ,设置为 $tdate 变量。
答案1
您必须引用 grep: 的参数grep "$tdate"
。这是因为$tdate
扩展为两个空格分隔的单词,这两个单词又作为两个参数传递给 grep,除非添加双引号。
您的脚本可以改进以删除 cat 的无用使用,并且仅调用 grep 一次:
</var/log/secure grep "$tdate.*servername su" >>"$attempted_su_log"
答案2
tdate
那里有一个空间。因此,grep 将 的第二部分视为tdate
文件名。您需要$tdate
用双引号括起来以防止这种情况发生。您的命令应如下所示:
cat /var/log/secure | grep "$tdate" | grep 'servername su' >> $attempted_su_log