w usa /var/run/utmp e o /proc filesystem (no Linux), gravando quem está conectado no momento.
last usa /var/log/wtmp (e /var/log/btmp ), mostrando como foi feito o login. No entanto, nem todo programa atualizará esses arquivos adequadamente, em alguns sistemas esses arquivos podem nem existir.
Por exemplo, no meu sistema, w vê minhas 5 sessões de login em uma única sessão de tela GNU:
$ w | tail -n +3 | wc -l 5 $ last | grep -c still\ logged 1
Ainda, last registrou apenas uma sessão ativa . Ao configurar deflogin=off na tela GNU, até w perde o controle das sessões de login ativas e continua exibindo 5 sessões, mesmo que eu tenha aberto apenas outras 5 janelas na mesma sessão de tela.
IOW: use, e. ps para descobrir quantos usuários estão "on-line", quantos shells estão abertos, etc. Ele fornecerá resultados mais precisos, pois não depende de arquivos de estado (obsoletos) como /var/log/utmp .