Когда ваши данные ограничены:
:
perl -F'[:]' -lane '
push @e, join $", splice @F, -1;
push @A, join $", @F;
length($A[-1]) > $maxW and $maxW = length($A[-1])}{
print $_, $" x ($maxW - length), "\t", shift @e for @A;
' file
alice bob cathy david elon
unix linux bsd
если вы хотите, чтобы последние 2 элемента были разделены, измените -1
в списке аргументов splice
на -2
, в результате чего:
alice bob cathy david elon
unix linux bsd
@e
, который содержит последние -N-е элементы для каждой строки. @A
, который содержит каждую h строку после того, как последние -N элементов были удалены из текущей строки. #! /bin/bash
while :; do
running=$(netstat -plnt)
if [ "$running" != "$newrunning" -a -n "$firstrun" ]; then
diff -u <(echo "$newrunning") <(echo "$running") | mail -s "New listeners!" user@example.com
fi
newrunning=$(netstat -plnt)
firstrun=1
sleep 1
done
Этот сценарий (должен быть запущен под root, очевидно, )будет уведомлять вас о любых новых/удаленных приложениях, которые открывают прослушиваемые порты.
Здесь можно установить список приложений
Можно добавить в cronjob
#!/bin/bash
known_apps="sshd|nginx|mysqld|redis"
netstat=$(netstat -plnt | awk 'FNR > 2' | egrep -v "$known_apps")
if [[ $? -eq 0 ]]; then
echo "other apps, running"
send mail command including $netstat
fi
Если вам не нужен cronjob, вместо if
используйтеwhile
while true;
do
echo "other apps, running"
sendmail command include $netstat
sleep 2 (or how often you want this loop to run )
done
Он будет просто уведомлять вас о новых приложениях