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

Comment puis-je voir combien de personnes ont été connectées à une machine Linux? Je sais que la commande 'utilisateurs' montre toutes les personnes connectées mais j'ai besoin d'un numéro. Existe-t-il un changement pour les utilisateurs que je manque dans la page man? J'ai pensé à l'utilisation de la commande grep -c , mais il doit y avoir quelque chose qui soit identique dans chaque nom d'utilisateur pour que cela fonctionne. Y at-il un moyen plus facile?

Vous recherchez la commande wc (compte de mots).

Essaye ça:

 users | wc -w 

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

 who | wc -l 

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

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

 who | grep -c . 

Il y a toujours au moins un personnage sur chaque ligne.


Comme indiqué dans les commentaires de John T , la commande des users diffère de ceux who à plusieurs égards. Le plus important est que, au lieu de donner un nom par ligne, il diffuse plusieurs noms par ligne: je n'ai pas de machine avec suffisamment d'utilisateurs connectés pour tester ce qui se passe lorsque le nombre d'utilisateurs devient grand. L'autre différence est que «qui» relève des connexions de terminal en cours d'utilisation. Avec plusieurs fenêtres de terminal ouvertes, il affichera plusieurs lignes pour un seul utilisateur, tandis que «les utilisateurs» semblent répertorier un utilisateur connecté une seule fois.

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

Ouvrez un shell et tapez:

 who -q 

La dernière ligne vous donnera un compte.

MODIFIER:

(Soupir) J'ai mal compris la question. Voici une approche un peu brute:

Pour voir des noms d'utilisateur uniques:

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

Pour voir un nombre d'utilisateurs uniques:

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

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, alors 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 

Voici une version bash de la superbe remarque 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, c'est un peu plus long, mais ça vaut la peine de trouver celui-là … :).

Pendant le test, faites avant la prochaine tentative:

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

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 
 who | cut --delimiter=' ' -f 1 | sort -u | wc -l 

Qui imprime la liste, coupe, supprime tout sauf la première rangée, tri-la sorte et supprime les doublons et wc -l compte les lignes. Fonctionne bien pour moi sur ubuntu / bash 🙂

Vous pouvez simplement utiliser w ( /usr/bin/w sur mon système basé sur Red Hat) ou le 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 

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]}}' 

:}

http://www.gnu.org/software/coreutils/manual/html_node/who-invocation.html

«Qui» imprime des informations sur les utilisateurs qui sont actuellement connectés. Synopsis:

Qui [option] [fichier] [je suis]

Vous pouvez toujours télécharger l'outil gratuit pour UNIX appelé TOP. Il produit une liste des utilisateurs et aussi ce qu'ils font sur le système à l'époque et continuera à se mettre à jour tant qu'il fonctionne.

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

Il existe de nombreux commutateurs de ligne de commande afin que vous puissiez extraire les informations que vous recherchez.

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

 cat -n /etc/passwd