我想写一个Bash脚本,检查Linux服务器的阿普表,如果接口MAC地址发生变化,那么它会将其记录到一个文件中,并注明发生变化的日期/时间。
我写了下面的脚本,并通过使用macchanger -m
更改接口的MAC地址来测试它,但它似乎不能正常工作:
while true 10; do
touch tempfile
arp -e -v | awk '{print $1,$3,$5}' | column -t | sed "/Entries/d" >tempfile2
if ! diff tempfile tempfile2 |grep ">"|cut -c 3-; then
mv tempfile2 tempfile
ts '[%Y-%m-%d %H:%M:%S]' <tempfile |
tee -a /home/user/arp_script/arp_changes.txt
fi
sleep 10
done
阿普-e -v命令的输出示例:
Address HWtype HWaddress Flags Mask Iface
192.168.21.1 ether 00:50:56:c0:00:08 C ens33
_gateway ether 00:50:56:e9:05:e3 C ens33
192.168.21.254 ether 00:50:56:e3:ec:7a C ens33
192.168.48.1 ether 00:50:56:c0:00:01 C ens37
192.168.21.130 ether 00:0c:29:44:6e:f4 C ens33
Entries: 5 Skipped: 0 Found: 5
例如,如果接口ens 37的mac地址更改为b2:ee:83:a7:c7:c7,那么我希望脚本将以下行输出到文件arp_changes. txt:
[2023-05-09 03:56:23] 192.168.48.1 00:50:56:c0:00:01 ens37
[2023-05-09 03:59:23] 192.168.48.1 b2:ee:83:a7:c7:c7 ens37
2条答案
按热度按时间sdnqo3pr1#
ts '[%Y-%m-%d %H:%M:%S]'tee
看起来好像缺少了一个|
:尝试ts '[%Y-%m-%d %H:%M:%S]' | tee
此外,使用
>
的I/O重定向意味着每次都要覆盖输出文件。您确定不想使用>>
来追加到文件中吗?lawou6xi2#
您可以将上一次运行存储在临时文件中,仅在结果不同时才打印。
正确的实现应该使用
mktemp -d
为临时文件创建一个临时目录,并在脚本中断时使用trap
删除它。也许更好的解决方案是将中间结果存储在变量中。
如果您不想将第一个结果视为更改,那么应该不难找出如何扩展
if
条件,以便在前一个结果文件或变量为空时也不触发。