Comment puis-je trouver le nombre d'utilisateurs en ligne sous Linux?

10

Comment puis-je voir combien de personnes sont connectées à une machine Linux? Je sais que la commande «utilisateurs» affiche toutes les personnes connectées mais j'ai besoin d'un numéro. Existe-t-il un commutateur pour les utilisateurs qui me manque dans la page de manuel? J'ai pensé à utiliser la grep -ccommande, mais il doit y avoir quelque chose qui est le même dans chaque nom d'utilisateur pour que cela fonctionne. Existe-t-il un moyen plus simple?

Jamal
la source

Réponses:

15

Vous recherchez la commande wc(nombre de mots).

Essaye ça:

users | wc -w
John T
la source
notez que cette approche (une solution who / w) affiche uniquement les utilisateurs connectés, pas nécessairement les utilisateurs actifs (c'est-à-dire les utilisateurs qui démarrent un processus puis se déconnectent en laissant le processus en cours). Juste pour donner une idée de la différence.
estani
18

Classiquement, la commande est «qui» plutôt que «utilisateurs», mais «qui» vous donne plus d'informations. En regardant les articles Unix originaux (milieu des années 70), l'exemple aurait été:

who | wc -l

L'utilisation de 'wc -l' compte les lignes de sortie - cela fonctionne à la fois avec 'utilisateurs' et 'qui'. L'utilisation de «-w» ne fonctionne de manière fiable que lorsqu'il y a un mot par utilisateur (comme avec «utilisateurs» mais pas avec «qui»).

Vous pouvez utiliser 'grep -c' pour compter les lignes. Puisque vous n'êtes intéressé que par les noms d'utilisateur non vides, vous pouvez faire:

who | grep -c .

Il y a toujours au moins un caractère sur chaque ligne.


Comme indiqué dans les commentaires de John T , la userscommande diffère whoà plusieurs égards. Le plus important est qu'au lieu de donner un nom par ligne, il répartit les noms plusieurs par ligne - Je n'ai pas de machine avec suffisamment d'utilisateurs différents connectés pour tester ce qui se passe lorsque le nombre d'utilisateurs devient important. L'autre différence est que «qui» rend compte des connexions de terminal utilisées. Avec plusieurs fenêtres de terminal ouvertes, il affichera plusieurs lignes pour un seul utilisateur, tandis que «utilisateurs» semble répertorier une seule fois un utilisateur connecté.

En raison de cette différence, la grep -c .formulation ' ' ne fonctionnera pas avec la commande 'users'; ' wc -w' est nécessaire.

Jonathan Leffler
la source
small nitpick - la commande users n'imprime pas 1 ligne par utilisateur, elle imprime simplement les identifiants séquentiellement, donc grep -c. ne fonctionnerait pas dans ce cas. Pensée intelligente cependant.
John T
cela signifie également que wc -l ne fonctionnera pas avec la commande users, comme indiqué ici: i26.tinypic.com/4pw0vd.png
John T
@ John T: oh - eh bien, étant donné la capture d'écran, vous avez raison. J'ai testé les «utilisateurs» sur MacOS X - mais avec un seul utilisateur connecté. Lorsque je vérifie à nouveau avec un deuxième utilisateur connecté, je vois le comportement «tout en une ligne».
Jonathan Leffler
1
pour simuler plus d'utilisateurs, vous pouvez SSH dans votre propre boîte :)
John T
Merci pour ces précieuses informations, même si je voulais m'en tenir à la commande "utilisateurs". Vous a également voté, merci.
7

Ouvrez un shell et tapez:

who -q

La dernière ligne vous donnera un décompte.

ÉDITER:

(soupir) J'ai mal compris la question. Voici une approche quelque peu brutale:

Pour voir les noms d'utilisateur uniques:

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

Pour voir le nombre d'utilisateurs uniques:

who | awk '{ print $1 }' | sort | uniq | wc -l 
Avery Payne
la source
qui compte toutes les connexions du même utilisateur dans le total.
hayalci
vérifiez la réédition, je pense que vous constaterez que les nouvelles réponses répondent à cela.
Avery Payne
Cela ne fonctionne toujours pas, uniq ne supprime que les lignes successives en double, vous devez trier la sortie de qui en premier.
theotherreceive
c'est ce que j'obtiens pour poster des réponses à 1h du matin. (soupir) fixe.
Avery Payne
3

Voulez-vous voir le nombre de sessions ou le nombre d' utilisateurs réels ?

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

C'est sur mon ordinateur portable, donc je suis le seul utilisateur, mais je suis connecté trois fois.

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

Il est assez facile de filtrer ces doublons pour obtenir le nombre d'utilisateurs réels.

$ users | tr ' ' '\n' | sort -u 
andrew
$ users | tr ' ' '\n' | sort -u | wc -l
1
l'autre reçoit
la source
3

Voici une version bash de Tink grand post awk de:

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

D'accord, c'est un peu plus long, mais ça valait le coup de trouver celui-ci ... :).

Pendant les tests, faites avant la prochaine tentative:

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

nombre d'utilisateurs actuellement connectés:

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

le buta ci-dessus avec son nom de compte:

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

Qui imprime la liste, coupe supprime tout sauf la première ligne, trie -u trie et supprime les doublons et wc -l compte les lignes. Fonctionne bien pour moi sur ubuntu / bash :)

Kim
la source
1

Vous pouvez simplement utiliser w( /usr/bin/wsur mon système basé sur Red Hat) ou uptime, ils montrent le nombre réel d'utilisateurs connectés.

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

disponibilité:

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

Et une méthode qui utilise un seul tuyau ...

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

:}

tink
la source
0

Vous pouvez toujours télécharger l'outil gratuit pour unix appelé TOP. Il produit une liste des utilisateurs et également ce qu'ils font sur le système à ce moment-là et continuera à se mettre à jour tant qu'il est en cours d'exécution.

Il se trouve sur http://www.unixtop.org/

Il possède de nombreux commutateurs de ligne de commande, vous devriez donc être en mesure d'extraire les informations que vous recherchez.

Axxmasterr
la source
Je n'ai pas encore trouvé de distribution Linux qui n'inclut pas top par défaut, sans parler de ne pas avoir l'option de l'installer à partir des packages.
theotherreceive
0
who | cut -d ' ' -f1 | uniq | wc -l
Arjun Dandagi
la source
2
Cela semble être une variation mineure de la réponse de Kim et ne contient aucune explication. Il pourrait être plus approprié de commenter cette réponse (ce qui nécessite un peu plus de répétition). L'intention est que chaque réponse apporte une solution substantiellement différente de ce qui a déjà été apporté.
fixer1234
-2

Si vous recherchez le nombre total d'utilisateurs connectés et déconnectés dans un ordre approprié, la meilleure commande à exécuter est

cat -n /etc/passwd
Amrik Singh
la source
2
Non, ce n'est pas ce que fait cette commande. cat -nimprime simplement toutes les lignes du fichier, en les numérotant chacune. Vous obtiendrez une liste d'utilisateurs qui existent sur ce système, mais vous n'obtiendrez pas beaucoup d'informations de connexion.
cpast