如何解决为动态日期编写脚本以查找访问服务器的无效用户
编写一个脚本,以日期(如 3 月 1 日)为参数,找到到达服务器的无效命中,并在第二天自动更新日期
我试过这个不行
d=date "+%h %d"
sudo cat /var/log/secure | grep d | grep Invalid | awk {print $1,$2,$8,$10} | sort | uniq -c
它显示给我(./currentlog.sh: line 32: +%h %e: command not found)但它打印了 2 月 28 日无效以及 3 月 1 日无效用户
解决方法
您在这里有多个语法错误。
-
d=date
将字符串date
分配给变量d
,然后在此分配就位时尝试将标记"+%h %d"
作为命令运行。您似乎在寻找运行d=$(date "+%h %d")
并将输出分配给变量date "+%h %d"
的d
。 - 然后您使用
grep d
但这当然会针对文字字符串d
而不是变量进行 grep。 - 如果不加引号,Awk 脚本会将
$1
替换为当前 shell 脚本的第一个参数,将$2
替换为第二个,依此类推。除非全部这些变量恰好包含有效的 Awk 代码。 - 您还需要避免那些useless
grep
s
您可能正在尝试编写类似的东西
sudo cat /var/log/secure |
awk -v d="$(date "+%h %d")" '
/Invalid/ && ($0 ~ d) { print $1,$2,$8,$10}' |
sort | uniq -c
更详细地说,我们将 date
的输出分配给 Awk 变量 d
并使用 Awk 模式匹配语言仅匹配此变量和静态的 print
行模式Invalid
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。