Blog DLN Cloud

4 comandos para descobrir quem está logado no linux

Descubra quem está logado no linux usando 4 comandos diferentes.

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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *