Script de shell para mostrar usuários on-line

2

Eu sei que é uma questão amadora. Eu preciso escrever um script de shell Bash que conta quantos usuários estão online no momento no servidor SSH. Eu preciso ignorar vários logins e mostrar o nome de usuário e o lugar onde eles se conectaram.

Obrigado.

    
por Patrik Zelena 11.12.2013 / 22:09

2 respostas

1

Isso cheira a lição de casa, mas tudo bem:

#!/bin/bash

users=$(users | xargs -n1 | sort -u)
for u in $users; do
    w -h | awk '{print $1 " " $3}' | grep -m1 $u
done

Explicação:

Primeiramente, criamos uma lista de usuários logados com o comando "user" e filtramos os duplicados, colocando um em cada linha (xargs -n) e classificando com os únicos filtrados (sort -u).

w -h imprime uma lista de todos os usuários logados, nós mandamos que através do awk imprima apenas os campos desejados (1 e 3), canalizando o resultado através do grep para filtrar todos, exceto o usuário que estamos procurando em cada loop iteração. -m1 garante que pare após a primeira partida, você também pode canalizar através da 'cabeça -1'.

    
por 12.12.2013 / 00:11
0

Use o comando w , que mostra quem está conectado e o que está fazendo.

mike@magisterial $ w
 12:00:25 up 239 days, 22:40, 18 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
john    pts/1    xx.yy.74.10    09:29    1:34m  0.59s  0.02s sshd: john [priv]
jane    pts/3    xx.yy.74.10    09:44    2:05m  0.38s  0.01s sshd: jane [priv]
mike    pts/4    xx.yy.74.10    09:45    1:10m  0.21s  0.21s -bash

No seu caso, filtre a saída com o grep para retornar apenas os logins do ssh:

w | grep 'sshd:'

john    pts/1    xx.yy.74.10    09:29    1:34m  0.59s  0.02s sshd: john [priv]
jane    pts/3    xx.yy.74.10    09:44    2:05m  0.38s  0.01s sshd: jane [priv]
    
por 22.06.2017 / 13:11