¿Cómo puedo encontrar el número de usuarios en línea en Linux?


10

¿Cómo puedo ver cuántas personas están conectadas a una máquina Linux? Sé que el comando 'usuarios' muestra a todas las personas conectadas pero necesito un número. ¿Hay algún cambio para los usuarios que me falta en la página de manual? Pensé en usar el grep -ccomando, pero debe haber algo que sea igual en cada nombre de usuario para que esto funcione. hay una manera mas facil?

Respuestas:


15

Está buscando el wccomando (recuento de palabras).

Prueba esto:

users | wc -w

tenga en cuenta que este enfoque (una solución who / w) muestra solo usuarios conectados, no necesariamente usuarios activos (es decir, usuarios que inician un proceso y luego cierran sesión dejando atrás el proceso en ejecución). Solo para avisar sobre la diferencia.
— estani

18

Clásicamente, el comando es 'quién' en lugar de 'usuarios', pero 'quién' le brinda más información. Mirando hacia atrás a los artículos originales de Unix (mediados de los 70), el ejemplo habría sido:

who | wc -l

El uso de 'wc -l' cuenta líneas de salida: funciona tanto con 'usuarios' como con 'quién'. El uso de '-w' solo funciona de manera confiable cuando hay una palabra por usuario (como con 'usuarios' pero no con 'quién').

Puede usar 'grep -c' para contar las líneas. Como solo le interesan los nombres de usuario que no están en blanco, puede hacer lo siguiente:

who | grep -c .

Siempre hay al menos un personaje en cada línea.


Como se señaló en los comentarios de John T , el userscomando difiere whoen varios aspectos. La más importante es que, en lugar de dar un nombre por línea, difunde los nombres por línea: no tengo una máquina con suficientes usuarios diferentes conectados para probar qué sucede cuando el número de usuarios aumenta. La otra diferencia es que 'quién' informa sobre las conexiones de terminal en uso. Con múltiples ventanas de terminal abiertas, mostrará varias líneas para un solo usuario, mientras que 'usuarios' parece enumerar un usuario conectado solo una vez.

Como consecuencia de esta diferencia, la grep -c .formulación ' ' no funcionará con el comando 'usuarios'; ' wc -w' es necesario.


nitpick pequeño: el comando de los usuarios no imprime 1 línea por usuario, solo imprime las identificaciones secuencialmente, por lo que grep -c. No funcionaría en este caso. Pensamiento inteligente sin embargo.
— John T

esto también significa que wc -l no funcionará con el comando de los usuarios, como se muestra aquí: i26.tinypic.com/4pw0vd.png
— John T

@John T: oh, bueno, dada la captura de pantalla, tienes razón. Probé 'usuarios' en MacOS X, pero con solo un usuario conectado. Cuando verifiqué dos veces con un segundo usuario conectado, veo el comportamiento 'todo en una línea'.
— Jonathan Leffler

1
para simular más usuarios, puede SSH en su propia caja :)
— John T

Gracias por esta valiosa información, aunque quería seguir con el comando "usuarios". También te voté, gracias.

7

Abra un shell y escriba:

who -q

La última línea te dará un recuento.

EDITAR:

(suspiro) No entendí la pregunta. Aquí hay un enfoque de fuerza bruta:

Para ver nombres de usuario únicos:

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

Para ver un recuento de usuarios únicos:

who | awk '{ print $1 }' | sort | uniq | wc -l 

que cuenta todos los inicios de sesión del mismo usuario en el total.
— hayalci

revise la reedición, creo que encontrará que las nuevas respuestas abordan eso.
— Avery Payne

Esto todavía no funciona, uniq solo elimina las líneas sucesivas duplicadas, primero debe ordenar la salida de quién.
— theotherrecibido el

eso es lo que obtengo por publicar respuestas a la 1am. (suspiro) arreglado.
— Avery Payne

3

¿Desea ver la cantidad de sesiones o la cantidad de usuarios reales ?

$ 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)

Eso está en mi computadora portátil, así que soy el único usuario, pero he iniciado sesión tres veces.

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

Sin embargo, es bastante fácil filtrar estos duplicados para obtener el número de usuarios reales.

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

3

Aquí hay una versión bash de la gran publicación 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, es un poco más largo, pero valió la pena encontrar este ... :).

Mientras realiza la prueba, haga antes del siguiente intento:

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

2

Número de usuarios actualmente conectados:

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

el buta anterior con su nombre de cuenta:

who |cut -c 1-9 |sort -u |tee /dev/tty |wc -l

1
who | cut --delimiter=' ' -f 1 | sort -u | wc -l

Quien imprime la lista, corta elimina todo menos la primera fila, ordena -u ordena y elimina duplicados y wc -l cuenta las líneas. Funciona bien para mí en ubuntu / bash :)


1

Simplemente puede usar w( /usr/bin/wen mi sistema basado en Red Hat) o uptime, muestran el número real de usuarios conectados.

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

tiempo de actividad:

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

1

Y un método que usa solo una tubería ...

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

:}



0

Siempre puedes descargar la herramienta gratuita para Unix llamada TOP. Produce una lista de los usuarios y también lo que están haciendo en el sistema en ese momento y continuará actualizándose mientras se esté ejecutando.

Se encuentra en http://www.unixtop.org/

Tiene muchos interruptores de línea de comandos, por lo que debería poder extraer la información que está buscando.


Todavía tengo que encontrar una distribución de Linux que no incluya la parte superior de forma predeterminada, y mucho menos no tenga una opción para instalarla desde los paquetes.
— theotherrecibido el

0
who | cut -d ' ' -f1 | uniq | wc -l

2
Esto parece una variación menor de la respuesta de Kim, y no contiene ninguna explicación. Puede ser más apropiado como comentario sobre esa respuesta (que requiere un poco más de repetición). La intención es que cada respuesta proporcione una solución que sea sustancialmente diferente de lo que ya se ha aportado.
— Fixer1234

-2

Si está buscando el número total de usuarios conectados y desconectados en una secuencia adecuada, el mejor comando para ejecutar es

cat -n /etc/passwd

2
No, eso no es lo que hace ese comando. cat -nsolo imprime todas las líneas en el archivo, numerando cada una. Obtendrá una lista de usuarios que existen en ese sistema, pero no obtendrá mucha información de inicio de sesión.
— cpast
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.