Essa é uma dica que ensina comandos que você pode usar no linux para saber quais contas de usuários estão logadas e acessando o sistema no momento.
Comando users
O Primeiro comando é o users, que é simples e mostra somente os nomes das contas de usuários atualmente logados no host/servidor atualmente.
No exemplo abaixo executo o comando users em um sistema linux ubuntu server:
dlncloud@server:~$ users
analista dlncloud root
O comando mostra no exemplo que atualmente as contas de usuário root, analista e dlncloud estão logados no sistema.
Comando who
Outro comando que podemos usar para saber quem está logado é o who, mas diferentemente do comando users, o comando who pode exibir algumas informações adicionais sobre usuários que estão conectados no momento.
dlncloud@server:~$ who
root tty1 2022-02-03 02:18
analista tty2 2022-02-03 02:18
dlncloud pts/0 2022-02-03 02:18 (192.168.0.3)
No exemplo acima, é exibido as contas de usuário root logado no terminal virtual tty1, analista logado no terminal virtual tty2 e dlncloud no terminal virtual pts/0 que se logou a partir do host que tem o enderçeo IP 192.168.0.3.
Para suprimir informações e mostrar somente a quantidade de usuários logados e saber quem são podemos usar a opção -q minúsculo do comando who.
dlncloud@server:~$ who -q
root analista dlncloud
# users=3
Para exibir o cabeçalho do comando who definindo o que informa cada coluna é usada a opção -H, onde a primeira coluna “NAME” tem os nomes das contas logadas no momento:
NAME LINE TIME COMMENT
root tty1 2022-02-03 02:18
analista tty2 2022-02-03 02:18
dlncloud pts/0 2022-02-03 02:18 (192.168.0.3)
E o último exemplo é para exibir somente quem está logado a partir de um host remoto no sistema usamos a opção -m minúsculo do comando who:
dlncloud@server:~$ who -H -m
NAME LINE TIME COMMENT
dlncloud pts/0 2022-02-03 02:18 (192.168.0.3)
Comando w
O comando w é semelhante ao comando who mas exibe mais informações ainda, além das informações sobre os usuários logados atualmente na máquina mostra os processos que cada usuário executa.
O cabeçalho mostra, na ordem da esquerda para direita, a hora atual, há quanto tempo o sistema está em execução, quantos usuários estão conectados(logados) em terminal virtual no momento e as médias de carga do sistema nos últimos 1, 5 e 15 minutos.
dlncloud@server:~$ w
03:48:46 up 1:31, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 02:18 1:30m 0.04s 0.02s -bash
analista tty2 - 02:18 10.00s 0.05s 0.01s top
dlncloud pts/0 192.168.0.3 02:18 5.00s 0.06s 0.00s w
As colunas na saída do comando w são exibidas da esquerda para direita para cada usuário: USER(nome de login), TTY(nome do tty), FROM(host remoto) e a última coluna WHAT mostra o nome do processo atual executado pela conta de usuário no momento que o comando w foi executado.
Para omitir algumas informações da saída do comando w é usada a opção -s ou –short para exibir informações de quem está logado mas com uma quantidade pequena de informações:
dlncloud@server:~$ w --short
03:56:04 up 1:39, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM IDLE WHAT
root tty1 - 1:37m -bash
analista tty2 - 7:28 top
dlncloud pts/0 192.168.0.3 4.00s w --short
Comando loginctl
E o último comando dessa dica é o loginctl que faz parte do SystemD, esse comando loginctl é usado para controlar o gerenciador de login do SystemD e também para saber quem está logado no sistema. usando o comando interno list-users do loginctl é possível ver quem está logado:
dlncloud@server:~$ loginctl list-users
UID USER
0 root
1000 dlncloud
1001 analista
3 users listed.
Na saída é exibido quem está logado e em qual terminal virtual, além de informar o UID de cada conta de usuário.
Para mostrar mais informações, incluindo o que a conta de usuário está executando(processos) usamos o comando interno user-status do loginctl seguido do nome da conta de usuário que deve exibir as informações:
dlncloud@server:~$ loginctl user-status analista
analista (1001)
Since: Thu 2022-02-03 02:18:34 UTC; 1h 59min ago
State: active
Sessions: *3
Linger: no
Unit: user-1001.slice
├─session-3.scope
│ ├─1023 /bin/login -p --
│ ├─1100 -bash
│ └─1339 top
└─[email protected]
└─init.scope
├─1094 /lib/systemd/systemd --user
└─1095 (sd-pam)
Feb 03 02:18:34 server systemd[1094]: Listening on GnuPG cryptographic agent and passphrase cache (restricted).
Feb 03 02:18:34 server systemd[1094]: Listening on GnuPG cryptographic agent (ssh-agent emulation).
Feb 03 02:18:34 server systemd[1094]: Listening on GnuPG cryptographic agent and passphrase cache.
Feb 03 02:18:34 server systemd[1094]: Listening on debconf communication socket.
Feb 03 02:18:34 server systemd[1094]: Listening on REST API socket for snapd user session agent.
Feb 03 02:18:34 server systemd[1094]: Listening on D-Bus User Message Bus Socket.
Feb 03 02:18:34 server systemd[1094]: Reached target Sockets.
Feb 03 02:18:34 server systemd[1094]: Reached target Basic System.
Feb 03 02:18:34 server systemd[1094]: Reached target Main User Target.
Feb 03 02:18:34 server systemd[1094]: Startup finished in 87ms.
Se o comando loginctl for executado sem nenhum comando interno a saída do comando mostra mais informações como a sessão(session) aberta pelo usuário no momento que se logou no sistema:
dlncloud@server:~$ loginctl
SESSION UID USER SEAT TTY
1 0 root seat0 tty1
3 1001 analista seat0 tty2
5 1000 dlncloud pts/0
3 sessions listed.
Para inspecionar mais informações sobre a sessão aberta por uma conta de usuário, usamos o comando interno show-session do loginctl, vamos usar a sessão com o ID 5 da conta de usuário dlncloud no exemplo abaixo:
dlncloud@server:~$ loginctl show-session 5
Id=5
User=1000
Name=dlncloud
Timestamp=Thu 2022-02-03 02:18:43 UTC
TimestampMonotonic=104007033
VTNr=0
TTY=pts/0
Remote=yes
RemoteHost=192.168.0.3
Service=sshd
Scope=session-5.scope
Leader=1110
Audit=5
Type=tty
Class=user
Active=yes
State=active
IdleHint=no
IdleSinceHint=1643862080994602
IdleSinceHintMonotonic=7461680980
LockedHint=no
Na saída o destaque vai para Service que é o nome do serviço usado para se autenticar no sistema, para remote que com o valor yes significa que o acesso é remoto, em RemoteHost tem a o IP do host que foi usado para se logar no sistema.
Podemos encerrar sessões com o comando loginctl, mas para isso precisamos que o comando seja executado com uma conta de usuário com permissão administrativa.
AVISO:
É importante informar que ao encerrar um sessão todos os processos executados na sessão será encerrado e o usuário será deslogado
Por exemplo para fechar a sessão com ID 3 usamos o comando interno terminate-session do loginctl seguido do número 3:
dlncloud@server:~$ loginctl terminate-session 3
==== AUTHENTICATING FOR org.freedesktop.login1.manage ===
Authentication is required to manage active sessions, users and seats.
Authenticating as: dlncloud
Password:
==== AUTHENTICATION COMPLETE ===
No momento de executar o comando loginctl terminate-session não estava logado com usuário root e não usei o comando sudo, logo o sistema pede autenticação do usuário dlncloud que é membro do grupo sudo, que é o grupo configurado no /etc/sudoers para ter permissão administrativa para executar comandos como root.
Ao executar novamente somente o comando loginctl a sessão 3 não é exibida mais por que foi encerrada:
dlncloud@server:~$ loginctl
SESSION UID USER SEAT TTY
1 0 root seat0 tty1
5 1000 dlncloud pts/0
2 sessions listed.
Espero que os comandos demosntrados nessa dica sejam úteis e possa auxiliar em saber quem está logado no sistema e até mesmo obter informações sobre as contas de usuários logadas, com destaque para o comando loginctl que é o comando mais completo de todos que foram demosntrados aqui.