O nome do serviço está disponível na coluna cinco no arquivo de log syslog (como encontrado em uma máquina Ubuntu com configuração syslog padrão). Geralmente é listado como servicename[pid]:
, por exemplo CRON[1233]:
ou ntpd[9283]:
etc.
Para obter o quinto campo:
awk '{ print $5 }' /var/log/syslog
Para excluir tudo desse campo, do [
onwards:
awk '{ sub("[[].*", "", $5); print $5 }' /var/log/syslog
Agora você terá uma lista como
dhclient
dhclient
dhclient
CRON
ntpd
CRON
CRON
ntpd
Agora você só precisa classificá-los e contá-los e manter os melhores:
awk '{ sub("[[].*", "", $5); print $5 }' /var/log/syslog |
sort | uniq -c | sort -rn | head -n 5
Isso pode produzir algo como
27 dhclient
23 CRON
13 ntpd
(apenas três serviços nesta máquina em particular).
Para remover os números, filtre por awk '{ print $2 }'
.
Você também pode usar tr
e cut
, mas essas ferramentas são um pouco "simples" demais para esse trabalho IMHO. cut
, em particular, precisa saber exatamente quantos caracteres delimitadores serão cortados, portanto, se uma coluna for delimitada por mais de um caractere de espaço, cut
precisará levar isso em conta.