我有一个单行命令,可以从 Web 服务器访问日志中列出前 10 个最活跃的 IP 地址:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n10
Run Code Online (Sandbox Code Playgroud)
示例结果集(为简单起见只有 3 个条目)将是:
20 12.34.56.7
22 3.67.89.201
29 9.0.203.255
Run Code Online (Sandbox Code Playgroud)
如您所见,计数在 IP 地址之前,两者由空格分隔。计数前实际上也有空格,但我无法在此处显示它们。
我喜欢对 IP 地址进行反向 DNS 查找,使其看起来像这样:
20 12.34.56.7 (d12-34-56-7.abhsia.telus.net)
22 3.67.89.201 (customer.vpls.net)
29 9.0.203.255 (9-0-203-255.hlrn.qwest.net)
Run Code Online (Sandbox Code Playgroud)
如何在不求助于脚本的情况下执行此操作(即坚持使用单行命令)?非常感谢任何建议。
我知道 bash 内部命令hash以及如何使用hash -d或hash -r忘记记住的位置。有没有办法在bash“缓存未命中”时指示自动执行此操作,即当记住的位置消失时 ( no such file or directory)bash会清除记住的位置并重试?