Cela peut dépendre de la façon dont votre système d'enregistrement est configuré, mais je pense que cela fonctionnerait sur un système par défaut :
grep -oP "A=\K([A-Za-z0-9_.:]+)" /var/log/exim4/mainlog | sort | uniq -c | sort -nr
Ce qui donnerait quelque chose comme ça :
151 dovecot_plain:grafana
12 dovecot_plain:jolt
6 dovecot_plain:banana
2 dovecot_login:banana
Ce que je fais ici est de trouver A= qui contient le nom d'utilisateur et la manière dont il a été authentifié à partir de /var/log/exim4/mainlog puis je le dirige vers sort
y uniq -c
qui les regroupe en un groupe et vous donne un numéro. Le dernier sort -nr
me donne juste le compte dans un groupe ordonné en sens inverse (le nombre maximum en premier).
Si vous avez différents types d'authentification, par exemple dovecot_plain y dovecot_login mais avec le même nom d'utilisateur, alors la façon la plus simple de s'en débarrasser est de mettre un autre grep qui ne récupère que ce qui est après " :", comme ceci :
grep -oP "A=\K([A-Za-z0-9_.:]+)" /var/log/exim4/mainlog | grep -oP ":\K(.*)" | sort | uniq -c | sort -nr
Et le résultat :
151 grafana
12 jolt
8 banana
Nota: Je n'ai pas pris en compte la limite de 24 heures, car cela dépend aussi de la façon dont l'enregistrement est configuré, et cela devient plus compliqué, mais je pense que c'est un bon début. Sinon, vous devez d'une manière ou d'une autre filtrer les timestamps de vos logs avec grep pour filtrer les dates, et ensuite passer cela dans ma chaîne grep.