Como posso encontrar o número de usuários online no Linux?

10

Como posso ver quantas pessoas estão conectadas a uma máquina Linux? Sei que o comando 'users' mostra todas as pessoas conectadas, mas preciso de um número. Existe uma opção para usuários que estou ausente na página de manual? Pensei em usar o grep -ccomando, mas deve haver algo igual em cada nome de usuário para que isso funcione. Existe uma maneira mais fácil?

Jamal
fonte

Respostas:

15

Você está procurando o wccomando (contagem de palavras).

Tente o seguinte:

users | wc -w
John T
fonte
observe que essa abordagem (uma solução who / w) mostra apenas usuários conectados, não necessariamente usuários ativos (ou seja, usuários que iniciam um processo e saem do sistema, deixando para trás o processo em execução). Apenas para dar um alerta sobre a diferença.
Estani
18

Classicamente, o comando é 'quem' em vez de 'usuários', mas 'quem' fornece mais informações. Olhando para os artigos originais do Unix (meados dos anos 70), o exemplo teria sido:

who | wc -l

O uso de 'wc -l' conta as linhas de saída - ele funciona com 'users' e 'who'. O uso de '-w' só funciona de maneira confiável quando há uma palavra por usuário (como em 'users', mas não em 'who').

Você pode usar 'grep -c' para contar as linhas. Como você está interessado apenas em nomes de usuário não em branco, você pode:

who | grep -c .

Sempre há pelo menos um caractere em cada linha.


Conforme observado nos comentários de John T , o userscomando difere de whovários aspectos. O mais importante é que, em vez de dar um nome por linha, ele espalha os nomes vários por linha - não tenho uma máquina com usuários diferentes o suficiente conectados para testar o que acontece quando o número de usuários se torna grande. A outra diferença é que 'quem' relata as conexões do terminal em uso. Com várias janelas de terminal abertas, ele mostrará várias linhas para um único usuário, enquanto 'users' parece listar um usuário conectado apenas uma vez.

Como conseqüência dessa diferença, a grep -c .formulação ' ' não funcionará com o comando 'users'; ' wc -w' é necessário.

Jonathan Leffler
fonte
nitpick pequeno - o comando users não imprime 1 linha por usuário, apenas imprime os IDs sequencialmente, então grep -c. não funcionaria neste caso. Pensamento inteligente.
John T
isso também significa que wc -l não vai funcionar com os usuários comando, como mostrado aqui: i26.tinypic.com/4pw0vd.png
John T
@ John T: oh - bem, dada a captura de tela, você está correto. Testei 'usuários' no MacOS X - mas com apenas um usuário conectado. Quando verifiquei novamente com um segundo usuário conectado, vejo o comportamento 'tudo em uma linha'.
Jonathan Leffler
1
para simular mais usuários você pode SSH em sua própria caixa :)
John T
Obrigado por essas informações valiosas, embora eu queira continuar com o comando "users". Também te votaram, obrigado.
7

Abra um shell e digite:

who -q

A última linha lhe dará uma contagem.

EDITAR:

(suspiro) Eu entendi mal a pergunta. Aqui está uma abordagem de força bruta:

Para ver nomes de usuário exclusivos:

who | awk '{ print $1 }' | sort | uniq

Para ver uma contagem de usuários únicos:

who | awk '{ print $1 }' | sort | uniq | wc -l 
Avery Payne
fonte
que conta todos os logins do mesmo usuário no total.
hayalci
verifique a reedição, acho que você descobrirá que as novas respostas abordam isso.
Avery Payne
Isso ainda não funciona, o uniq remove apenas linhas sucessivas duplicadas, você precisa classificar a saída de quem primeiro.
theotherreceive
é isso que recebo por postar respostas à 1h. (suspiro) fixo.
Avery Payne
3

Deseja ver o número de sessões ou o número de usuários reais ?

$ who
andrew   tty1         2009-07-26 15:31 (:0)
andrew   pts/0        2009-07-27 00:11 (:0.0)
andrew   pts/1        2009-07-27 01:58 (:0.0)

Está no meu laptop, então sou o único usuário, mas estou logado três vezes.

$ who | wc -l
3
$ users | wc -w
3

É bastante fácil filtrar essas duplicatas para obter o número de usuários reais.

$ users | tr ' ' '\n' | sort -u 
andrew
$ users | tr ' ' '\n' | sort -u | wc -l
1
theotherreceive
fonte
3

Aqui está uma versão básica do ótimo post awk de tink :

set $(users)
declare -A user
for u ; do ((user[$u]++)) ; done
for key in "${!user[@]}" ; do echo "$key: ${user[$key]}" ; done | column -t | sort -nk 2

Ok, é um pouco mais longo, mas valeu a pena encontrar este ... :).

Durante o teste, faça antes da próxima tentativa:

shift $#                # clear positional parameters
unset user              # remove associative array variable
Sasch
fonte
2

número de usuários atualmente conectados:

who |cut -c 1-9 |sort -u |wc -l

o buta acima com o nome da conta:

who |cut -c 1-9 |sort -u |tee /dev/tty |wc -l
Cris
fonte
1
who | cut --delimiter=' ' -f 1 | sort -u | wc -l

Quem imprime a lista, recortar, remove tudo, exceto a primeira linha, ordena -u ordena e remove duplicatas e wc -l conta as linhas. Funciona bem para mim no ubuntu / bash :)

Kim
fonte
1

Você pode simplesmente usar w( /usr/bin/wno meu sistema baseado no Red Hat) ou uptimeeles mostram o número real de usuários logados.

W:

                              v
 22:40:38 up 3 days, 22 min,  1 user,  load average: 0.02, 0.01, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
manuel   pts/0    pc-manuel        09:35    0.00s  0.07s  0.00s /usr/bin/screen -xRR

tempo de atividade:

                              v
 22:39:18 up 3 days, 21 min,  1 user,  load average: 0.08, 0.02, 0.01
Manuel Faux
fonte
1

E um método que usa apenas um tubo ...

users | awk '{for(i=1;i<=NF;i++){a[$i]++}}END{for(i in a){print i"\t"a[i]}}'

:}

consertar
fonte
0

Você sempre pode baixar a ferramenta gratuita para o unix chamada TOP. Ele produz uma lista dos usuários e também o que eles estão fazendo no sistema no momento e continuará sendo atualizado enquanto estiver em execução.

Está localizado em http://www.unixtop.org/

Possui muitas opções de linha de comando, portanto, você poderá extrair as informações que está procurando.

Axxmasterr
fonte
Ainda não encontrei uma distribuição Linux que não inclua top por padrão, e muito menos não tenho uma opção para instalá-la a partir de pacotes.
theotherreceive
0
who | cut -d ' ' -f1 | uniq | wc -l
Arjun Dandagi
fonte
2
Parece uma pequena variação da resposta de Kim e não contém explicações. Pode ser mais apropriado como um comentário sobre essa resposta (que requer um pouco mais de repetição). A intenção é que cada resposta forneça uma solução substancialmente diferente da que já foi contribuída.
Fixer1234
-2

Se você estiver procurando o número total de usuários conectados e desconectados em uma sequência adequada, o melhor comando a ser executado é

cat -n /etc/passwd
Amrik Singh
fonte
2
Não, não é isso que esse comando faz. cat -napenas imprime todas as linhas do arquivo, numerando cada uma. Você obterá uma lista de usuários que existem nesse sistema, mas não receberá muitas informações de login.
cpast