¿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?

Jamal
fuente

Respuestas:

15

Está buscando el wccomando (recuento de palabras).

Prueba esto:

users | wc -w
John T
fuente
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.

Jonathan Leffler
fuente
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 
Avery Payne
fuente
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
el otro recibir
fuente
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
Sasch
fuente
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
Cris
fuente
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 :)

Kim
fuente
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
Manuel Faux
fuente
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]}}'

:}

tink
fuente
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.

Axxmasterr
fuente
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
Arjun Dandagi
fuente
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
Amrik Singh
fuente
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